Когда я использую PDO :: query? - PullRequest
3 голосов
/ 01 декабря 2011

Много было написано о преимуществах использования PDO::prepare, но мало что было написано о преимуществах использования PDO::query.Я считаю, что PDO::query создан, чтобы служить цели, и должно быть некоторое относительное преимущество использования этой функции по сравнению с PDO::prepare.

У меня есть запрос, который выглядит так:

SELECT * from Table ORDER BY id DESC LIMIT 100;

Этот запрос не содержит пользовательских данных для экранирования и переменных для повторных запросов.Должен ли я использовать PDO::query, вернуться к mysqli_query или придерживаться PDO::prepare в этом случае?

ОБНОВЛЕНИЕ : Дальнейшее изучение общего журнала запросов показывает это для обоих PDO::prepare и PDO::query:

22 Connect user@localhost on Database
22 Prepare SELECT * from Table ORDER BY id DESC LIMIT 100
22 Execute SELECT * from Table ORDER BY id DESC LIMIT 100
22 Close stmt   
22 Quit

Я ожидал, что PDO::query произведет:

22 Connect user@localhost on Database
22 Query SELECT * from Table ORDER BY id DESC LIMIT 100
22 Quit

Но это происходит только с обоими, когда setAttribute(PDO::ATTR_EMULATE_PREPARES, true).Я весьма удивлен результатом, который я получаю.Кажется, что PDO::query также генерирует готовые операторы.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Полагаю, я полностью пропустил это.В руководстве по PHP для PDO::query говорится:

PDOStatement PDO::query ( string $statement )

Параметры

оператор

Оператор SQL для подготовки и выполнения.

Это означает, что оператор SQL подготовлен даже с PDO::query.Поэтому нет абсолютно никакого преимущества в использовании PDO::query, кроме сохранения одной или двух строк в скрипте PHP.Это подтверждается общим журналом запросов, показанным в приведенном выше вопросе.

2 голосов
/ 01 декабря 2011

Если вам просто нужно это один раз, то нет смысла создавать подготовленный оператор (который, если не будет эмулирован, приведет к двум сетевым передачам в базу данных).Тем более, когда нет переменных параметров, которые нужно связать.

PDO::query не о преимуществах.Его использование сопровождается отсутствием каких-либо.Одноразовые запросы не извлекают выгоду из потенциального скоростного преимущества подготовленных операторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...