【发布时间】:2017-04-16 20:57:26
【问题描述】:
我想转义所有要插入数据库的字符串。但我的问题是,因为我有超过 10.000 个字符串要检查,所以数据库查询会太多......
所以我使用了这个转义函数,我在 stackoverflow.com 中找到了它:
function escape($value) {
$return = '';
for($i = 0; $i < strlen($value); ++$i) {
$char = $value[$i];
$ord = ord($char);
if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126)
$return .= $char;
else
$return .= '\\x' . dechex($ord);
}
return $return;
}
它正在工作。但我的问题是,我没有任何ö、ä 或类似的字符...
在我调用这个函数之前,我有一个这样的字符串:Königsedition,在我调用这个函数之后,我应该得到K\xc3\x83\xc2\xb6nigsedition。但问题是,由于某些原因,我的数据库中出现了Kxc3xb6nigsedition...
我怎样才能把它转回Königsedition?
或者,有没有其他方法可以转义字符串,而不使用SQL真正的转义函数,因为那时我必须要超过10.000个SQL查询,才能转义一个字符串并保留@ 987654329@ 格式化? (我更喜欢这种方式!)
您好,谢谢!
【问题讨论】:
-
参数化查询呢?
-
"for some reason" 你在你的数据库中得到一个字符串......不是因为你没有调用那个“转义”函数。由于执行了 INSERT 或 UPDATE 语句,您将在数据库中获得一个字符串。如果您要插入从该“转义”函数返回的字符串,那么这将是您在数据库中获取字符串的“原因”。我不明白为什么你会期望一个字符串 different 与你插入的字符串不同。为什么要“使用此转义功能”?我不明白目的。
-
只需使用带有绑定占位符的准备好的语句,并提供要插入的字符串的值。确保作为值传递的字符串的编码 匹配 为 MySQL 客户端和列指定的字符集。 dev.mysql.com/doc/refman/5.7/en/charset-connection.html
标签: php mysql string escaping mysql-real-escape-string