PHP Symfony2 Doctrine PDO_PGSQL переменные привязки

#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));