#php #postgresql #symfony #pdo #doctrine-orm
#php #postgresql #симфония #pdo #doctrine-orm
Вопрос:
У меня есть этот запрос в моем 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 в запросе, и запрос не будет работать так, как я хочу.
Ответ №1:
Для параметра с именем :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));