php和mysql中的反斜杠

php和mysql中的反斜杠,php,mysql,addslashes,Php,Mysql,Addslashes,我有一个关于MySql和PHP中反斜杠的问题!我写了一个简单的测试代码 include "src/db.inc.php"; $name="licon's"; $name=addslashes($name); $sql="insert into test values('$name')"; mysql_query($sql); $sql1="select * from test"; $rs=mysql_query($sql1); $row=mysql_fetch_assoc($rs); echo

我有一个关于MySql和PHP中反斜杠的问题!我写了一个简单的测试代码

include "src/db.inc.php";
$name="licon's";
$name=addslashes($name);
$sql="insert into test values('$name')";
mysql_query($sql);
$sql1="select * from test";
$rs=mysql_query($sql1);
$row=mysql_fetch_assoc($rs);
echo $row['name'];
当代码显示时,我想在表中插入一个带有单引号的字符串

1.我需要转义字符串,这里我使用函数
addslashes()
。 因此,
$name
将是这样的“
licon的

2.但是当我在表中插入
$name
并在mysql控制台中选择它时,由函数
addslashes
添加的反斜杠消失了。如下所示:

mysql> select * from test;
+---------+
| name    |
+---------+
| licon's |
+---------+
$sql1="select * from test";
$rs=mysql_query($sql1);
$row=mysql_fetch_assoc($rs);
echo $row['name'];
======
print: licon's 
3.当我在PHP脚本中选择字段“
name
”并打印它时,反斜杠也会消失。
详情如下:

mysql> select * from test;
+---------+
| name    |
+---------+
| licon's |
+---------+
$sql1="select * from test";
$rs=mysql_query($sql1);
$row=mysql_fetch_assoc($rs);
echo $row['name'];
======
print: licon's 

所以我想知道函数
addslashes()
在变量
$name
中添加反斜杠。为什么反斜杠会消失?

如果您使用MySQL,那么使用
MySQL\u real\u escape\u string($name)
或者使用
mysqli\u real\u escape\u string($connection,$name)
如果您使用mysqli获取存储在MySQL数据库中的干净输入。

原因是旧的PHP版本有magic_quotes_gpc(),默认情况下,magic_quotes_gpc()处于启用状态,这将对Get/Post/Cookie操作执行以下操作

  • 启用magic_quotes时,所有“(单引号)、“(双引号)、\(反斜杠)都会自动用反斜杠转义
现在,虽然您需要回显,但它需要stripslashes()

新的PHP和mysql根本不需要这些,mysql非常适合处理您的报价和特殊特许,因此最好使用mysql_real_escape_string()或等效的mysqli_函数

更重要的是,从PHP5.3.0开始,这个特性就被弃用了,所以它可能什么也不做,因为您正在使用addslashes()


不,addslashes会向您发送到MySQL的数据添加斜杠,但MySQL会在将数据存储到数据库之前删除斜杠。MySQL会将\'解释为一段数据,而将单个\'解释为SQL语句语法的一部分。

addslashes()的主要功能用于转义输入。我知道addslashes()的功能。但我想知道在PHP中选择此选项时,为什么不需要使用stripslashes(),您使用的是哪个PHP版本?因为没有斜杠!我使用wamp 2.4和PHP 5.4.16这不是重点!甚至我使用mysql\u real\u escape\u string($name),当我从mysql中选择反斜杠时,反斜杠仍然会消失!我只是想知道为什么我不需要使用stripslashes!这是唯一的一点tudouya,你应该在前面描述一下你想知道的内容。@tudouya阅读了完整的答案,然后得出结论,这不是重点和全部。我为我的ca感到抱歉放松!我读了你的更新评论!它解决了我的问题!再次抱歉!你的声誉!