Разница между PDO-> query() и PDO-> exec()

пусть ссылки на PDO равны объекту PDO, а не самому PDO -

Я вижу здесь, что есть как PDO->query(), так и PDO->exec(). На странице, которая была связана, кажется, что PDO->query(); используется только для операторов SELECT, а PDO->exec() используется для операторов UPDATE, INSERT, DELETE. Теперь я совершенно новичок в PDO, поэтому я не уверен, что происходит с точки зрения его использования, но я был бы признателен за объяснение того, почему использовать разные методы и почему существуют разные методы.

Ответ 1

Несмотря на любую теоретическую разницу, ни одна из этих функций не должна использоваться в любом случае, поэтому нечего беспокоиться.

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

Используйте prepare()/execute() вместо особенно для операторов UPDATE, INSERT, DELETE.

Обратите внимание, что хотя подготовленные заявления широко рекламируются в качестве меры безопасности, это привлекает внимание людей. Но их реальная цель правильное форматирование запроса. Это также дает вам безопасность - так же, как и правильно отформатированный запрос, нельзя вводить также как побочный эффект. Но опять же - форматирование является основной целью только потому, что даже невинные данные могут вызывать ошибку запроса, если они не отформатированы должным образом.

EDIT: Обратите внимание, что execute() возвращает только TRUE или FALSE, чтобы указать успешность операции. Для другой информации, такой как количество записей, на которые влияет UPDATE, предоставляются методы, такие как rowCount(). См. docs.

Ответ 2

Посмотрите официальные документы для PDO:

  • PDO::exec() - "Выполнить инструкцию SQL и вернуть количество затронутых строк"
  • PDO::query() - "Выполняет инструкцию SQL, возвращая результирующий набор как объект PDOStatement"

Обе функции выполняют запрос, но exec() возвращает количество затронутых строк. Это полезно для запроса UPDATE, где ничего полезного не возвращается, и полезно только знать, было ли изменено правильное количество строк.