【问题标题】:Viewing escaped characters in database mysql?查看数据库mysql中的转义字符?
【发布时间】:2015-07-07 23:21:15
【问题描述】:

我正在使用 mysqli 准备语句将值插入数据库。我知道这个扩展可以正确处理字符转义。

我有一个文件路径:images/serveover/Bellini 83.png,插入后我期望看到的是数据库中带有转义字符的文件路径,类似于images\/serveover\/Bellini 83.png,但我只看到图像路径。

如何确保我的字符串已正确转义?这是 phpMyAdmin 中的视图标准,它不显示转义字符还是只是将它们隐藏在视图中?

下面是我的插入准备语句,其中所有值都被正确填充:

 $insertQuery  = $conn -> prepare("INSERT INTO images (image_id, image_date_created, image_date_modified, image_title, image_src, category_id, image_status, image_external_file, another_id) VALUES (null, NOW(), CURRENT_TIMESTAMP, ?, ?, ?,'A', ?, ?)");

 if($insertQuery ) 
 {              
    $insertQuery -> bind_param("ssisi", $title, $image, $row["category_id"], $file, $row["id"]);            
    $insertQuery -> execute();              
    $insertQuery -> close();
  } 

【问题讨论】:

  • 您对字符进行转义,以便将其可以干净地插入数据库中,因此它不会将其与转义一起存储在数据库中,而是作为简单数据...... . 如果数据没有被正确转义,那么它将无法插入到数据库中
  • 所以它不一定通过在字符串中添加`\`来转义字符对吧?
  • 请注意,如果您在准备好的语句中使用绑定变量,那么这会有效地为您“转义”字符串,您不必自己做......但如果您不使用绑定变量,那么 SQL 将不知道 ' 是否是字符串的一部分,或者标记字符串的结尾,除非您对其进行转义
  • 好吧@MarkBaker,这真的很有用。非常感谢。

标签: php mysql mysqli prepared-statement


【解决方案1】:

只要您在处理字符串,转义过程就会简单地指示 MySQL 忽略字符的特殊属性并将其视为普通字符。

鲍勃的特殊字符串

被输入到数据库中

Bob 的特殊字符串

请务必注意,准备好的语句根本不使用转义。准备好的语句在一组中发送查询,在另一组中发送数据,因此 MySQL 不需要转义它,因为它知道这是要存储的实际值。

您可以在 MySQL 手册中阅读有关该过程的更多信息 https://dev.mysql.com/doc/refman/5.0/en/string-literals.html

【讨论】:

  • 所以如果我有$city = " 's Hertogenbosch "; 并且我使用$city = mysqli_real_escape_string($link, $city); 我会在数据库中看到's Hertogenbosch 对吗?如果是,那么转义过程到底在做什么?是不是只是通知DB引擎有特殊字符,不影响字符串插入DB的方式?
  • 不,转义完全按照您的想法进行,在麻烦的' 前面添加一个反斜杠,然后DB 引擎将' 视为普通字符并像这样保存它。
  • 我想我明白了。感谢您的帮助:)
猜你喜欢
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
  • 2010-11-06
  • 1970-01-01
相关资源
最近更新 更多