Php mysql\u real\u escape\u字符串仅转义一种类型的引号
我的服务器正在运行PHP5.2.17,我已经用一个PHP.ini文件禁用了magic quotes。我有一个字符串数组,有些字符串 abcd“efg”hij'k lmnop'q 我使用以下代码对它们进行转义,以便插入mysql数据库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
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);