mysql PDO 如何绑定 LIKE

2022-08-30 20:42:01

在此查询中

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

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

会不会

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

其中 绑定到:partial$partial="somet"

还是会是

select wrd from tablename WHERE wrd LIKE ':partial'

其中 绑定到:partial$partial="somet%"

还是会是完全不同的东西?


答案 1

你也可以说:

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

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

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

希望这不会影响您,但是如果您确实需要正确处理该案例,那么这是混乱的解决方案:

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

答案 2
$var = "partial%";
$stmt = $dbh->prepare("select wrd from tablename WHERE wrd LIKE :partial");
$stmt->bindParam(":partial", $var);
$stmt->execute(); // or $stmt->execute(array(':partial' => $var)); without 
                  // first calling bindParam()
$rs = $stmt->fetchAll();

使用问号参数:

$stmt = $dbh->prepare('select wrd from tablename WHERE wrd LIKE ?');
$stmt->execute(array('partial%'));
$rs = $stmt->fetchAll();

http://www.php.net/manual/en/pdo.prepare.php


推荐