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

时间:2014-07-08 18:17:33

标签: php mysql

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

6L831105EP011602

是一个很好的值,不会造成任何麻烦。

71V72876YH791094

再次,没有问题。

546635980E5898057

但是这个导致错误,大概是因为它被解析为双倍。

我尝试使用mysql_real_escape_string来清理数据,但是这会导致所有值都以''为前缀,除非它们被解析为double。

我应该对这些数据进行消毒的正确方法是什么?在尝试将值插入MySQL之前,如何确定值是否会导致解析错误?

1 个答案:

答案 0 :(得分:3)

mysql_real_escape_string() 为字符串添加引号。它 ESCAPES sql元字符。

e.g。

$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',除非您自己添加这些引号。 e.g。

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