我对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
中添加一个反斜杠。为什么反斜杠消失了?
答案 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操作执行以下操作。
现在,当你需要回声时,需要stripslashes()
新的PHP和mysql根本不需要它,mysql非常适合处理你的引号和特殊的章程,所以最好用的是mysql_real_escape_string()或等效的mysqli_ functions。
更重要的是,从PHP 5.3.0开始,此功能已被弃用,所以可能它没有做任何事情,因为你在做addslashes()
不,addslashes会向您发送给MySQL的数据添加斜杠,但MySQL会在将数据存储到数据库之前将其删除。 MySQL解释\'作为一个数据,在解释单个'作为SQL语句语法的一部分。