php – mysql_real_escape_string只转义一种报价

我的服务器运行PHP 5.2.17并且我已经使用php.ini文件禁用了魔术引号.我有一些字符串数组

abcd“efg”hij’k lmnop’q

我使用以下代码转义它们以插入到mysql数据库中

foreach($array as &$data) {
    mysql_real_escape_string($data);
}

我正在构建我的sql

$sql='INSERT INTO table VALUES('.
     '"'.$array[0].'", '.
     '"'.$array[1].'", '.
     '"'.$array[2].'")';

我尝试执行查询时出错.当我收到错误时输出$sql变量,似乎mysql_real_escape_string只转义单引号或双引号.

如果我的$sql变量是使用单引号创建的,其中列值是双引号,如上面那么单引号是转义但双引号不是.

如果我切换引号以便使用双引号创建$sql变量并且列值是单引号,则只转义双引号.

任何人都可以找出可能出错的地方吗?

**更新

马图想出来了.我已将代码更改为以下内容并且可以正常工作:

foreach($row as &$data) {
    $data = mysql_real_escape_string($data);
}

解决方法:

mysql_real_escape_string不修改字符串对象本身,即使你使用&通过引用而不是值传递.相反,它返回字符串的转义副本.你不能只运行这个功能;你必须将其输出分配给变量.

我不在我现在可以测试的地方,但是Joe说这样做有把戏:

$data = mysql_real_escape_string($data);
上一篇:c# – 如何在剃须刀foreach中使用html和escape razor?


下一篇:javascript – 使用瓶子将列表从python传递到js的最佳方法是什么?