Когда необходимо цитирование в подготовленных выражениях pdo в PHP? - PullRequest
0 голосов
/ 06 февраля 2010

Это из комментария под этим ответом, но я действительно не понимаю, что он имеет в виду:

Как перейти с mysql на pdo с использованием подготовленных операторов в PHP?

Ответы [ 2 ]

1 голос
/ 06 февраля 2010

Подготовленные операторы подготовлены, потому что вы создаете маркеры для PDO для вставки значений, и эти значения могут быть названы (например,: accountId,: url), где PDO найдет названный маркер, или позиционный (в частности, знак вопроса ( ?)) где PDO будет вставлять значения в том порядке, в котором были размещены маркеры.

например:

$query = "SELECT user_id FROM users WHERE username = ?";
$statement = $pdo->prepare($query);
$statement->execute(array("John Smith"));

Обратите внимание на явное отсутствие именованных параметров (в частности, использование? Вместо: username), и вместо этого используется позиционный стиль. Использовать те или иные параметры сугубо лично, хотя я считаю, что использование именованных параметров более понятно при отладке.

В любом случае. Это означает, что вам не нужно заключать в кавычки, если вы используете подготовленные операторы, и вам не нужно беспокоиться о внедрении SQL при использовании подготовленных операторов.

Теперь, на самом деле, PDO просит драйвер базы данных (MySQL, PostgreSQL, MS SQL, Oracle и т. Д.) Подготовить оператор, но если драйвер базы данных не может подготовить его, PDO будет имитировать эту функцию. Здесь все начинает сбиваться с толку, но вы можете смело забыть об этом и просто забыть использовать подготовленные операторы с параметрами.

1 голос
/ 06 февраля 2010

При использовании подготовленных операторов вам никогда не придется экранировать / заключать в кавычки строковый параметр для dbms (анализатор) вручную.
Комментарий относится к http://docs.php.net/pdo.prepared-statements:

Подготовленные операторы настолько полезны, что являются единственной функцией, которую PDO будет эмулировать для драйверов, которые их не поддерживают.
I.e. если драйвер не поддерживает подготовленные операторы, PDO по-прежнему отображает часть подготовительных операторов api и «переводит» их в операторы SQL, содержащие параметры (например, INSERT INTO foo (x,y,z) values(1,2,3)). Но это будет сделано прозрачно, то есть автоматически обработать кавычки.
...