php和mysql中的反斜杠

时间:2014-01-21 07:08:39

标签: 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 $row['name'];

如代码所示,我想在表格中插入带有单引号的字符串。

1.我需要转义字符串,这里我使用函数addslashes()。   所以$name将是这样的“licon\'s”。

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

mysql> select * from test;
+---------+
| name    |
+---------+
| licon's |
+---------+

3.当我在PHP脚本中选择字段“name”并打印时,反斜杠也会消失。
  如下:

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

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

2 个答案:

答案 0 :(得分:0)

如果您使用的是MySQL,请使用 mysql_real_escape_string($name) 或使用 mysqli_real_escape_string($connection,$name) ,如果您使用MySQLi来获取要存储的干净输入MySQL数据库。

答案 1 :(得分:0)

addslashes()和stripslashes()是一种操纵引号进出DB的旧方法。

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

  • 当magic_quotes开启时,所有' (单引号)," (双引号),\(反斜杠)自动用反斜杠转义

现在,当你需要回声时,需要stripslashes()

新的PHP和mysql根本不需要它,mysql非常适合处理你的引号和特殊的章程,所以最好用的是mysql_real_escape_string()或等效的mysqli_ functions。

更重要的是,从PHP 5.3.0开始,此功能已被弃用,所以可能它没有做任何事情,因为你在做addslashes()

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