【发布时间】:2011-11-13 12:11:21
【问题描述】:
我的服务器正在运行 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);
}
【问题讨论】:
-
你可能想看看PDO,占位符有点好。
-
一个PDO的使用例子可以在NullUserException的回答中找到(无耻的自我推销)
标签: php mysql escaping quotes mysql-real-escape-string