无法使用PHP PDO从数据库检索包含“%”的行

时间:2019-04-12 14:42:15

标签: php mysql pdo

我正在建立一个具有自动完成产品搜索栏的网站。当用户输入几个字母时,我会使用LIKE语句将它们与数据库进行比较,并获得看起来相似的产品。用户最多可以在搜索栏下方的下拉菜单中看到该用户正在考虑的4种产品。现在,一旦用户单击结果,我就将其传递回PHP PDO语句。

如果产品不包含%,则可以正常工作。但是我有诸如“ 100%产品A”之类的产品,我似乎无法解决。我知道在LIKE语句中使用了%。我以前喜欢,但是结果不是很好。我得到了想要的产品的其他变体。我该如何通过?

$pdo = new PDO($dsn, $user, $passwd);

//Retrieving Product Name
$prodName = $_GET['name'];

$stm = $pdo->prepare("SELECT * FROM products WHERE productName = ?");
$stm->bindValue(1, $prodName);
$stm->execute();

$row = $stm->fetch(PDO::FETCH_ASSOC);

$results[0] = $row["productName"]; 
$results[1] = $row["price"];
$results[2] = $row["quantity"];

$result=implode("','", $results);         
echo $result;

3 个答案:

答案 0 :(得分:0)

由于%具有特殊含义,因此您只需使用通常的\对其进行转义以使其按原样使用:

\%  A % character; see note following the table

因此,您只需将str_replace()的所有%\%

请参阅:https://dev.mysql.com/doc/refman/8.0/en/string-literals.html

答案 1 :(得分:0)

使用LIKE运算符检索包含%字符的行并没有单一问题,更不用说代码中使用的比较运算符了。

即使这样,它也只会给您额外的结果,而获得现有结果绝不会带来问题。

要声明存在此问题,您必须通过发布Minimal Complete Verifiable example来证明自己的话语,以便每个人都可以运行您的代码并确认问题确实存在。

但是,在这种简单的情况下,您将发现一些简单的错误,而不是证明,而该错误与%符号完全无关。例如,您的搜索字符串被某些货物崇拜代码严格编码/转义,并且自然变成了数据库中没有任何匹配项的另一个字符串

答案 2 :(得分:-1)

好吧,我只想使用%从搜索字符串中删除str_replace

//Retrieving Product Name
$prodName = str_replace('%', '', $_GET['name']);

您也可以通过将其放在方括号中或使用反斜杠来逃脱百分比:

//Retrieving Product Name
$prodName = str_replace('%', '[%]', $_GET['name']); // \% would work too instead of [%]
相关问题