Mysql g自己,那么要么你每次都是通过相同的代码来完成的(所以使用别人的相同代码不会有任何负面影响),要么你每次都冒着出错的风险

Mysql g自己,那么要么你每次都是通过相同的代码来完成的(所以使用别人的相同代码不会有任何负面影响),要么你每次都冒着出错的风险,mysql,sql,parameterized,Mysql,Sql,Parameterized,他们也更擅长不逃跑。例如,检查数字的字符串表示形式中的每个字符以查找“字符是没有意义的。但逃避不算作不必要的风险,也不算作合理的微观优化 “合理的微观优化”本身意味着两件事之一。要么它不需要花脑力去写,要么事后去读(在这种情况下,你也可以这样做),要么它被频繁地点击,以至于可以积少成多,而且很容易做到 (与此相关的是,编写一个高度优化的转义符也更有意义——所涉及的字符串替换类型是这样一种情况,即最常见的替换方法至少在某些语言中不如其他方法快,但只有在调用该方法的次数非常多的情况下,优化才有意义)

他们也更擅长不逃跑。例如,检查数字的字符串表示形式中的每个字符以查找
字符是没有意义的。但逃避不算作不必要的风险,也不算作合理的微观优化

“合理的微观优化”本身意味着两件事之一。要么它不需要花脑力去写,要么事后去读(在这种情况下,你也可以这样做),要么它被频繁地点击,以至于可以积少成多,而且很容易做到

(与此相关的是,编写一个高度优化的转义符也更有意义——所涉及的字符串替换类型是这样一种情况,即最常见的替换方法至少在某些语言中不如其他方法快,但只有在调用该方法的次数非常多的情况下,优化才有意义)

如果您有一个包含参数类型检查的库(或者基于类型使用的格式,或者通过验证,这两种方法在此类代码中都很常见),那么这很容易做到,因为这些库旨在大量使用,这是一个合理的微选择

如果您每次都在考虑8参数调用的7号参数是否可能包含
字符,那么它就不是

如果您愿意,它们也更容易转换到其他系统。为了再次查看我上面给出的两个示例,除了创建的类之外,您可以使用与
System.Data.SqlClient
Npgsql
几乎相同的代码,尽管SQL Server和Postgresql有不同的转义规则。对于二进制字符串、日期时间和其他一些共同的数据类型,它们也有完全不同的格式


而且,我真的不同意把这称为“热门话题”。至少在过去的十年里,它已经有了一个很好的共识。

+1极好的论据-还指出了巨大的性能优势(至少在SQL Server环境中)。感谢提供更新,我想再次投票。。。如果今晚没有其他帖子/更新,我可能会接受这个答案。
> Sent data. Formatting: length + space + payload
< Received data
-----
> 69 SELECT * FROM `users` WHERE `username` LIKE ? AND `creation_date` > ?
< Ok. Send parameter 1.
> 4 joe%
< Ok. Send parameter 2.
> 1 0
< Ok. Query result: [...]
// $params would usually be an argument, not in the code like this
$params = ['joe%', 0];

// Escape the values
foreach ($params as $key=>$value)
    $params[$key] = mysql_real_escape_string($value);

// Foreach questionmark in the $query_string (another argument of the function),
// replace it with the escaped value.
$n = 0;
while ($pos = strpos($query_string, "?") !== false && $n < count($params)) {
    // If it's numeric, don't use quotes around it.
    $param = is_numeric($params[$n]) ? $params[$n] : "'" . $params[$n] . "'";
    // Update the query string with the replaced question mark
    $query_string = substr($query_string, 0, $pos) //or $pos-1? It's pseudocode...
                  . $param
                  . substr($query_string, $pos + 1);
    $n++;
exec sp_executesql N'INSERT INTO Test (Col1) VALUES (@p0)',N'@p0 nvarchar(4000)',@p0=N'p1'