我的PHP代码中有这个查询:
select * from book where title ~* '\mkeyword'; /* \m matches only at the beginning of a word */
关键字是用户输入。如何重写查询以使用绑定变量? 当我这样做时:
select * from book where title ~* :keyword;
然后:
$stmt->bindValue('keyword', "\m".$keyword);
准备声明后, 我在查询中得到了\\ m,查询将无法按照我想要的方式运行。
答案 0 :(得分:0)
对于名为:keyword
的参数,您还必须使用相同的名称 - 包括冒号,请参阅PDOStatement::bindValue
的示例部分
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindValue(':calories', $calories, PDO::PARAM_INT);
$sth->bindValue(':colour', $colour, PDO::PARAM_STR);
所以在你的情况下,它应该是
$stmt->bindValue(':keyword', "\m" . $keyword);
作为替代方案,您还可以将数组提供给PDOStatement::execute
$stmt->execute(array(':keyword' => "\m" . $keyword));