Допустимые символы PDO для заполнителей

#php #pdo

#php #pdo

Вопрос:

В PHP с PDO, какими символами мы ограничены в использовании. Я пытался посмотреть в документации и онлайн, но безрезультатно.

Я нашел сообщение, в котором пользователь использовал дефис в имени, что привело к прерыванию запроса. Я пишу функцию, которая динамически генерирует эти имена, и поскольку дефисы не являются nos, мне было интересно, существует ли список альтернатив.

 <?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>
  

Итак, в этом примере какие символы были бы разрешены в строке ‘:color’?

Комментарии:

1. Я не уверен, в чем конкретно заключаются ограничения, но буквенные символы и подчеркивания никогда меня не подводили 🙂

Ответ №1:

Самый простой способ узнать, это просто проверить исходный код:

 BINDCHR     = [:][a-zA-Z0-9_] ;
  

Вы можете использовать буквенно-цифровые символы подчеркивание.

Комментарии:

1. Просто взглянув на исходный код, я вижу там ошибки … выражение их комментария неверно. -- за ними должен следовать пробел, а не просто любой символ без разрыва строки.

2. Не изменилось для PHP 5.6 , если кому-то интересно.

Ответ №2:

Если я правильно прочитал исходный код анализатора SQL PDO, это буквенно-цифровые символы плюс подчеркивание.