我的服务器运行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);