一尘不染

mysql_real_escape_string和单引号

mysql

我很沮丧 我希望能够在数据库名称中插入单引号-例如O’Connor。

因此,当插入数据库时​​,我这样做:

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

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

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

因此,如果要在Web应用程序中记住该姓氏,则必须使用:

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

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

您会发现,在搜索之后,文本框会自动存储刚搜索(使用会话)的值。所以我的代码是这样的:

 $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上,并且我没有编辑文件的权限:(


阅读 373

收藏
2020-05-17

共1个答案

一尘不染

听起来您的PHP配置中启用了“ 魔术引号”

要检查它是否真正启用:

echo get_magic_quotes_gpc();

要禁用,请编辑您的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
2020-05-17