例如:

StringBuilder sCommand = new StringBuilder("INSERT INTO User (FirstName, LastName) VALUES ");
            using (MySqlConnection mConnection = new MySqlConnection(ConnectionString))
            {
                List<string> Rows = new List<string>();
                for (int i = 0; i < 100000; i++)
                {
                    Rows.Add(string.Format("('{0}','{1}')", MySqlHelper.EscapeString("test"), MySqlHelper.EscapeString("test")));
                }
                sCommand.Append(string.Join(",", Rows));
                sCommand.Append(";");
                mConnection.Open();
                using (MySqlCommand myCmd = new MySqlCommand(sCommand.ToString(), mConnection))
                {
                    myCmd.CommandType = CommandType.Text;
                    myCmd.ExecuteNonQuery();
                }
            }


我想知道是否不对MySQL查询进行参数化,而是在进行大量插入时使用MySqlHelper.EscapeString是否同样安全。

最佳答案

您不能使用方法whatever.EscapeString(string)代替参数。仅仅因为这两个选项不相等。他们甚至没有关系。尽管有共同的信念,但任何转义都不是为了保护,也从来没有。它具有非常特定的用途,只是偶然可能会阻止SQL注入。但是,如果正确使用参数化查询,则可以保证受到保护。

就是说,一次查询Prepare()然后仅execute()循环准备查询的情况下,对多个插入使用参数将更快。

我还建议将插入的内容包装在事务中,这可能会大大加快操作速度。

关于c# - 不进行参数化MySQL查询是否安全,而是在进行非常大的插入时改用MySqlHelper.EscapeString(string)方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56968876/

10-17 02:46