一尘不染

mysql PDO如何绑定LIKE

mysql

在这个查询中

select wrd from tablename WHERE wrd LIKE '$partial%'

我正在尝试将变量'$partial%'与PDO 绑定。不确定最后如何处理%

可不可能是

select wrd from tablename WHERE wrd LIKE ':partial%'

:partial绑定到哪里$partial="somet"

还是会

select wrd from tablename WHERE wrd LIKE ':partial'

:partial绑定到哪里$partial="somet%"

还是会完全不同?


阅读 439

收藏
2020-05-17

共1个答案

一尘不染

您还可以说:

SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')

在MySQL末尾进行字符串连接,并不是在这种情况下有任何特殊原因。

如果wrd要查找的部分本身可以包含百分比或下划线字符(因为这些字符对LIKE运算符具有特殊含义)或反斜杠(MySQL用作LIKE运算符的另一种转义层),则事情会变得更加棘手。,根据ANSI
SQL标准)。

希望这不会影响您,但是如果您确实需要解决此问题,则可以使用以下凌乱的解决方案:

$stmt= $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'");
$escaped= str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var);
$stmt->bindParam(':term', $escaped);
2020-05-17