为什么mysql_real_escape_string在不应该的地方插入引号?


Why does mysql_real_escape_string insert quotes where there shouldn't be?

我有一个php页面,我用来从csv文件导入订单到mysql数据库。表中的一个varchar用于txnid。我发现偶尔会遇到导致"解析期间发现非法双值"错误的txnid。例如:

6L831105EP011602

是一个不会引起任何麻烦的好值。

71V72876YH791094

同样,没有问题。

546635980E5898057

但是这个会导致错误,可能是因为它被解析为双精度类型。

我已经尝试使用mysql_real_escape_string来净化数据,但这导致所有值都带有''前缀,除非它们将被解析为双精度。

处理这些数据的正确方法是什么?如何确定一个值是否会导致解析错误之前,我试图将其插入MySQL?

mysql_real_escape_string() does NOT为字符串添加引号。它转义 sql元字符。

$str1 = "Miles O'Brien";
$str2 = "546635980E5898057";
$str3 = 42;
echo mysql_real_escape_string($str1);   // output: Miles O''Brien
echo mysql_real_escape_string($str2);   // output: 546635980E5898057
echo mysql_real_escape_string($str3);   // output: 42
在任何情况下,

都不会像'Miles O''Brien'那样突然出现,除非你自己添加了那些引号。例如

echo "'" . mysql_real_escape_string($str1) . "'";