Intereting Posts
Является ли XForms по-прежнему стандартом, который внедряется и разрабатывается, или существует альтернатива на месте или разрабатывается? Doctrine2: Невозможно выбрать сущность через идентификационные переменные, не выбирая хотя бы один псевдоним корня сущности Ajax-вызов для динамического меню работает для первого элемента <select>, но не дополнительных PHP-массив экспорта для json для углового приложения Yii2: параметры конфигурации vs. const / define Прочтите длинное значение из webservice с помощью SoapClient Перенаправление на предполагаемый URL Lumen Служба sensio_distribution.webconfigurator не найдена PHP: проверка того, равны ли три переменные Как заставить MediaWiki соблюдать отдельные разрывы строк? PHP: вывод команды команды / Shell_exec в веб-браузере Что означает восклицательный знак в PHP? Ошибка анализа XML: объявление XML или текста не в начале объекта в php Шифрование / дешифрование файла с помощью Mcrypt использование print_r PHP_EOL

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

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

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

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

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

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

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

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

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

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

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