Php 在MySQL数据库中查询经过消毒的单引号。

Php 在MySQL数据库中查询经过消毒的单引号。,php,mysql,mysqli,Php,Mysql,Mysqli,在将姓名插入客户数据库时,我使用MySQLi函数real_escape_string来清理数据。现在,带有单引号的示例条目如下所示: Baker\'s Pharmacy 但是,当我尝试使用以下查询来查询名称时: $search = "Baker's Pharmacy"; $searchName = $db->real_escape_string($search); $query = "SELECT Name FROM Customers WHERE Name = '$searchName

在将姓名插入客户数据库时,我使用MySQLi函数real_escape_string来清理数据。现在,带有单引号的示例条目如下所示:

Baker\'s Pharmacy
但是,当我尝试使用以下查询来查询名称时:

$search = "Baker's Pharmacy";
$searchName = $db->real_escape_string($search);
$query = "SELECT Name FROM Customers WHERE Name = '$searchName'";
我不返回匹配项,搜索单引号的正确方法是什么


非常感谢您的帮助

有两个错误的假设需要澄清

  • 无论什么
    *escape\u string
    函数都不会对任何内容进行消毒。这只是一个令人讨厌的谣言,PHP人员最好最终摆脱它
  • 无论如何,通过使用此函数,您的数据格式不是针对数据库,而是仅针对SQL查询。所有斜杠都由数据库剥离,数据按原样存储

  • 在insert和select查询中,您必须使用mysqli编写的语句,而不是“消毒”,并且您将不会看到任何与引号相关的问题(除非有神奇的引号或其自制的等效引号存在)。

    请尝试
    $search=“Baker\\\\\'s Pharmacy”
    而不是使用
    real\u escape\u string
    正确的方法是存储实际数据,而不是数据的修改版本,并搜索您正在查找的实际数据。您应该使用查询参数将输入作为值处理,而不是在将其作为代码执行之前手动清理输入。它应该是不带斜杠的
    Baker's Pharmacy
    。看来你两次漏掉了数据。@你的常识很有道理!只有一个真正的_escape_字符串在数据输入上运行。还有什么可以清理输入的吗?神奇的引号是绝对关闭的。我使用准备好的查询和esacpe_字符串作为数据输入,这样可以解释数据库中出现的反斜杠。是否有一个查询可以从数据库中删除现有的斜杠,因为有太多的斜杠需要手动删除。嗯,就是这样。esacpe_字符串在这里是多余的,这正是问题的原因。不幸的是,我不知道一个现成的查询来清理您的数据。可能会问另一个问题,在这个非常regardI设法写了一个小PHP脚本来解决这个问题,感谢所有的帮助!过于小心的情况。