Php mysql\u real\u escape\u字符串仅转义一种类型的引号

Php mysql\u real\u escape\u字符串仅转义一种类型的引号,php,mysql,escaping,quotes,mysql-real-escape-string,Php,Mysql,Escaping,Quotes,Mysql Real Escape String,我的服务器正在运行PHP5.2.17,我已经用一个PHP.ini文件禁用了magic quotes。我有一个字符串数组,有些字符串 abcd“efg”hij'k lmnop'q 我使用以下代码对它们进行转义,以便插入mysql数据库 foreach($array as &$data) { mysql_real_escape_string($data); } 然后我像这样构造我的sql $sql='INSERT INTO table VALUES('. '"'.$arr

我的服务器正在运行PHP5.2.17,我已经用一个PHP.ini文件禁用了magic quotes。我有一个字符串数组,有些字符串

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\u real\u escape\u字符串只是转义单引号或双引号

若我的$sql变量是使用单引号创建的,列值用双引号括起来,就像上面一样,那个么单引号将被转义,而双引号则不会

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

有人能找出哪里出了问题吗

**更新

马丘明白了。我已将我的代码更改为以下代码,并且可以正常工作:

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

mysql\u real\u escape\u string
不会修改string对象本身,即使您使用
&
按引用而不是按值传递。相反,它返回字符串的转义副本。你不能只运行这个函数;您必须将其输出分配给变量

我现在不在一个可以进行测试的地方,但我说这样做很有效:

$data = mysql_real_escape_string($data);

Matchu是正确的,mysql\u real\u escape\u string返回转义字符串。试试看

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

祝你好运。

一个更好的解决方案是使用:


没有重复调用mysql\u real\u escape\u string(),没有迭代和(IMO)更干净的代码。

code:
$data=mysql\u real\u escape\u string($data)
@Joe:谢谢:)这个盒子上没有PHP,而且,由于我对PHP如何处理
&
不太熟悉,所以在没有测试的情况下,我对包含代码块没有信心。我将在那里快速编辑它,当然,正确的属性:)你可能想看看,占位符有点好。可以在NullUserException的答案(无耻的自我提升)中找到PDO的一个使用示例
$stmt = $dbh->prepare("INSERT INTO table VALUES(?, ?, ?)"); 
$stmt->execute($array);