php - mysql_real_escape_string 和单引号

标签 php mysql escaping mysql-real-escape-string

我很沮丧。我希望能够将带有单引号的名称插入到我的数据库中 - 例如,O'Connor。

因此,当插入数据库时​​,我会:

 $lname = mysql_real_escape_string($_POST['lname']);

然后我将 $lname 插入到数据库中。

当它在数据库中时,它显示为 O\'Connor。

因此,如果我要在我的网络应用程序中记忆起那个姓氏,我将不得不使用:

 $lname = stripslashes($r["lname"]);

这一切似乎工作正常。但是,我有一个搜索功能,可以搜索姓氏并显示结果。当我搜索时,我必须搜索 O\'Connor 才能获得任何结果。

你看,在我搜索之后,文本框会自动存储刚刚搜索的内容的值(使用 session )。所以我的代码是这样的:

 $search = mysql_real_escape_string($_GET['search']);
 $_SESSION['search'] = $search;

就像我之前说的,当我搜索时,我必须使用“O\'Connor”,然后我搜索之后,文本框中的值变成了“O\\\\'Connor”

试图解决这个问题一直令人沮丧。有谁知道我做错了什么?谢谢!

编辑:

这是我的 php5.ini 文件,关于魔术引号:

 ; Magic quotes
 ;

 ; Magic quotes for incoming GET/POST/Cookie data.
 magic_quotes_gpc = On

 ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
 magic_quotes_runtime = Off

 ; Use Sybase-style magic quotes (escape ' with '' instead of \').
 magic_quotes_sybase = Off

但是,我的网站托管在 GoDaddy 上,我没有编辑文件的权限:(

最佳答案

听起来像Magic Quotes在您的 PHP 配置中启用。

检查它是否实际启用:

echo get_magic_quotes_gpc();

To disable , 编辑你的 php.ini 文件:

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

或将此行添加到您的 .htaccess 中:

php_flag magic_quotes_gpc Off

关于php - mysql_real_escape_string 和单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200972/

相关文章:

php - IntlDateFormatter 返回错误的年份

php - 由于位数不同,sql 表中的时间查询不正确

c - 如何创建新的转义序列?

sed - 如何在 sed 中转义单引号?

PHP 函数调用 MySQL

php - mysqli 为 INSERT 查询返回 true,未插入行

php - 如何覆盖 Doctrine 中的现有实体?

sql - 如何合并两行并计算MySQL中两个时间戳值之间的时间差?

python - 无法在 python virtualenv 中安装 mysqlclient

Java PreparedStatement 使用两个单引号作为空字符串参数