3

我对 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。为什么反斜杠消失了?

4

2 回答 2

0

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

于 2014-01-21T07:15:00.203 回答
0

addlashes() 和 stripslashes() 是一些在数据库中操作引号的旧方法。

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

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

现在,当您需要回显时,它需要 stripslashes()

新的 PHP 和 mysql 根本不需要这些,mysql 可以很好地处理您的报价和特殊章程,所以最好使用 mysql_real_escape_string() 或等效的 mysqli_ 函数。

更重要的是,此功能自 PHP 5.3.0 起已被弃用,因此可能在您执行 addlashes() 时它什么都不做

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

于 2014-01-21T07:25:11.167 回答