mysql_real_escape_string和单引号

lit*_*leK 4 php mysql escaping mysql-real-escape-string

我很沮丧.我希望能够用单引号插入我的数据库名称 - 例如,O'Connor.

所以,当插入数据库时​​,我会:

 $lname = mysql_real_escape_string($_POST['lname']);
Run Code Online (Sandbox Code Playgroud)

然后我将$ lname插入数据库.

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

所以,如果我在网络应用程序中回忆起这个姓氏,我将不得不使用:

 $lname = stripslashes($r["lname"]);
Run Code Online (Sandbox Code Playgroud)

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

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

 $search = mysql_real_escape_string($_GET['search']);
 $_SESSION['search'] = $search;
Run Code Online (Sandbox Code Playgroud)

就像我之前说过的,当我搜索时,我必须使用"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
Run Code Online (Sandbox Code Playgroud)

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

jim*_*myi 7

听起来您的PHP配置中启用了Magic Quotes.

要检查它是否实际启用:

echo get_magic_quotes_gpc();
Run Code Online (Sandbox Code Playgroud)

要禁用,请编辑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
Run Code Online (Sandbox Code Playgroud)

或者将此行添加到.htaccess:

php_flag magic_quotes_gpc Off
Run Code Online (Sandbox Code Playgroud)