Почему я не могу написать подготовленные операторы PDO в кавычках? - PullRequest
0 голосов
/ 20 ноября 2011

У меня был следующий фрагмент кода с подготовленными PDO утверждениями :

$stmt = $conn->prepare('SELECT `myColumn1` FROM my_table '.
                       'WHERE `myColumn2`=:val LIMIT 1');
$stmt->bindValue(":val", $value);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

Это прекрасно работает.Он отправляет следующий запрос:

113 Query   SELECT `myColumn1` FROM my_table WHERE `myColumn2`=":val" LIMIT 1

и возвращает правильное значение.

Но это не сработает, если я изменю первую строку на

$stmt = $conn->prepare('SELECT `myColumn1` FROM my_table '.
                       'WHERE `myColumn2`=":val" LIMIT 1');

или

$stmt = $conn->prepare('SELECT `myColumn1` FROM my_table '.
                       'WHERE `myColumn2`=':val' LIMIT 1');

Отправляется тот же запрос, но PDO возвращает false.

Кто-нибудь может объяснить, почему?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2011

Одним из преимуществ готовых операторов является то, что типы обрабатываются для вас (вроде ...).Другими словами, подготовленные операторы позволяют MySQL (или любой другой СУБД) решать, как обрабатывать данные.При размещении кавычек это заставит его быть строкой, которая не имеет смысла.Если предполагается, что это строка, сервер с этим справится.

0 голосов
/ 20 ноября 2011

С страницы, которую вы цитируете :

Параметры для подготовленных утверждений не нужно заключать в кавычки;драйвер автоматически обрабатывает это.

Цель кавычек - отделить строковые данные от остальной части запроса, поскольку их трудно отделить (в отличие от чисел, которые имеют очевидный формат).Поскольку использование подготовленных операторов означает, что запрос и данные передаются отдельно, кавычки не нужны.

...