为什么 mysqli_real_escape_string 向我的字符串添加两个反斜杠

斯凯鲍恩

我正在运行 php 5.5.9

我将以下文本发布到一个 php 脚本,该脚本将其插入到 mysql 表的字段中。

这变得相当麻烦',为什么会这样

我正在使用以下代码将 POSTed 数据分配给变量(加上调试代码。)

$ITEMDESC2 = $_POST['ITEMDESC'];
$ITEMDESC = mysqli_real_escape_string($conn1, $ITEMDESC2);

error_log("ITEMDESC: $ITEMDESC  ITEMDESC2: $ITEMDESC2");

以下内容出现在我的 apache 日志文件中:

ITEMDESC:这变得非常令人讨厌\\'以及为什么
ITEMDESC2:这变得非常讨厌'以及为什么

为什么$ITEMDESC用双反斜杠而不是单反斜杠进行转义?

我已经读过这可能是由 magic_quotes 引起的,但据我所知,它们在 PHP 5.4 中被删除了

欢迎对此有任何见解。

编辑:根据要求添加更完整的工作示例。

<?php 
$conn1 = new mysqli('localhost', 'USER', 'PASSWORD', 'DB') 
or die ('Cannot connect to db');

$ITEMDESC = "This is Bob's Text";
$ITEMDESC2 = mysqli_real_escape_string($conn1, $ITEMDESC);
$SQL = "insert into table (description) values ('{$ITEMDESC2}');";

echo "<br>ITEMDESC: {$ITEMDESC}";
echo "<br>ITEMDESC2: {$ITEMDESC2}";
echo "<br>SQL: {$SQL}";

error_log("ITEMDESC: {$ITEMDESC}");
error_log("ITEMDESC2: {$ITEMDESC2}");
error_log("SQL: {$SQL}");
?>

apache2 错误日志包含:

ITEMDESC:这是 Bob 的文本
ITEMDESC2:这是 Bob 的文本
SQL:插入表(描述)值('这是 Bob 的文本');

浏览器输出(在屏幕上):

ITEMDESC:这是 Bob 的文本
ITEMDESC2:这是 Bob 的文本
SQL:插入表(描述)值('这是 Bob 的文本');

毛圈

您应该将代码迁移到准备好的语句这将使您避免这个奇怪的问题并提供更好的安全性。

$stmt = mysqli_prepare($link, 'INSERT INTO FooBar(description) VALUES (?)');
mysqli_stmt_bind_param($stmt, 's', $_POST['ITEMDESC']);
mysqli_stmt_execute($stmt);

不过,我个人更喜欢使用PDO,因为它可以选择使用命名参数,这使 SQL 更具可读性,并且界面兼容 PSR-2。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

mysqli_real_escape_string()中默认字符集的安全含义是什么?

来自分类Dev

如果我不使用mysqli_real_escape_string()有什么缺点?

来自分类Dev

为什么mysqli_real_escape_string将连接对象作为第一个参数

来自分类Dev

警告:mysqli_real_escape_string()恰好需要2个参数,给定1个...我做错了什么?

来自分类Dev

为什么在PHP中使用mysqli_real_escape_string时需要指定连接?

来自分类Dev

mysqli_real_escape_string()返回空字符串

来自分类Dev

什么时候应该使用PHP mysqli_real_escape_string()函数?

来自分类Dev

mysqli_real_escape_string($ connect,$ username)中$ connect的作用是什么?

来自分类Dev

对于PHP函数mysqli_real_escape_string(),$ link的用途是什么?

来自分类Dev

数据库即使使用mysqli_real_escape_string后也不允许特殊字符

来自分类Dev

反序列化通过mysqli_real_escape_string()和serialize()函数传递的字符串值

来自分类Dev

警告:mysqli_real_escape_string()期望参数1为mysqli,字符串在C:\ xampp \ htdocs \ lr \ lr.php中给出

来自分类Dev

为了防止sql注入,将mysqli_real_escape_string()仅应用一次以逗号分隔的字符串是否足够?

来自分类Dev

mysqli_real_escape_string安全吗?

来自分类Dev

完全丢失与mysqli_real_escape_string

来自分类Dev

为什么我在 python 字符串中得到一个反斜杠

来自分类Dev

为什么mysql_real_escape_string在MySQLi上不起作用?

来自分类Dev

PHPMyAdmin中的Unicode使用mysqli_real_escape_string

来自分类Dev

MySQL使用mysqli_real_escape_string转义单引号

来自分类Dev

mysqli_real_escape_string不起作用

来自分类Dev

使用mysqli_real_escape_string清理数据

来自分类Dev

使用mysqli_real_escape_string时查询不运行

来自分类Dev

试图解决 mysqli_real_escape_string

来自分类Dev

mysqli_real_escape_string 似乎不起作用

来自分类Dev

为什么添加两个空字符串的结果不为空?

来自分类Dev

为什么Visual Studio消除了我的反斜杠字符串

来自分类Dev

为什么将两个元素从字符串(从char到int)的转换不添加togeather?

来自分类Dev

意外的“ mysqli_real_escape_string()期望参数1为mysqli,输入为null”

来自分类Dev

为什么我的两个python字符串在程序中不相等但在解释器中相等?

Related 相关文章

  1. 1

    mysqli_real_escape_string()中默认字符集的安全含义是什么?

  2. 2

    如果我不使用mysqli_real_escape_string()有什么缺点?

  3. 3

    为什么mysqli_real_escape_string将连接对象作为第一个参数

  4. 4

    警告:mysqli_real_escape_string()恰好需要2个参数,给定1个...我做错了什么?

  5. 5

    为什么在PHP中使用mysqli_real_escape_string时需要指定连接?

  6. 6

    mysqli_real_escape_string()返回空字符串

  7. 7

    什么时候应该使用PHP mysqli_real_escape_string()函数?

  8. 8

    mysqli_real_escape_string($ connect,$ username)中$ connect的作用是什么?

  9. 9

    对于PHP函数mysqli_real_escape_string(),$ link的用途是什么?

  10. 10

    数据库即使使用mysqli_real_escape_string后也不允许特殊字符

  11. 11

    反序列化通过mysqli_real_escape_string()和serialize()函数传递的字符串值

  12. 12

    警告:mysqli_real_escape_string()期望参数1为mysqli,字符串在C:\ xampp \ htdocs \ lr \ lr.php中给出

  13. 13

    为了防止sql注入,将mysqli_real_escape_string()仅应用一次以逗号分隔的字符串是否足够?

  14. 14

    mysqli_real_escape_string安全吗?

  15. 15

    完全丢失与mysqli_real_escape_string

  16. 16

    为什么我在 python 字符串中得到一个反斜杠

  17. 17

    为什么mysql_real_escape_string在MySQLi上不起作用?

  18. 18

    PHPMyAdmin中的Unicode使用mysqli_real_escape_string

  19. 19

    MySQL使用mysqli_real_escape_string转义单引号

  20. 20

    mysqli_real_escape_string不起作用

  21. 21

    使用mysqli_real_escape_string清理数据

  22. 22

    使用mysqli_real_escape_string时查询不运行

  23. 23

    试图解决 mysqli_real_escape_string

  24. 24

    mysqli_real_escape_string 似乎不起作用

  25. 25

    为什么添加两个空字符串的结果不为空?

  26. 26

    为什么Visual Studio消除了我的反斜杠字符串

  27. 27

    为什么将两个元素从字符串(从char到int)的转换不添加togeather?

  28. 28

    意外的“ mysqli_real_escape_string()期望参数1为mysqli,输入为null”

  29. 29

    为什么我的两个python字符串在程序中不相等但在解释器中相等?

热门标签

归档