PDO в исполнении MySQL - PullRequest
       8

PDO в исполнении MySQL

5 голосов
/ 12 марта 2010

Недавно я просматривал блог и заметил некоторые моменты, связанные с использованием PDO в mysql, и это изменило мое мнение о PDO. Очки:

  1. Собственные подготовленные операторы не могут использовать кеш запросов, что приводит к снижению производительности.

  2. Собственно подготовленные операторы не могут выполнять определенные типы запросов, например "SHOW TABLES"

  3. Собственно подготовленные операторы неправильно отображают длину столбцов для некоторых других запросов «SHOW», что приводит к искаженным результатам.

  4. Многократный вызов хранимых процедур с использованием собственных подготовленных операторов приводит к разрыву соединения.

Может кто-нибудь прокомментировать это, пожалуйста?

Я хотел кеш запросов в моем веб-приложении. Я готовлюсь переместить свое веб-приложение для использования PDO после рассмотрения проблем с производительностью моего веб-сайта. Может кто-нибудь предложить мне?

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 12 марта 2010

Хорошо

  • вы правы по первому пункту
  • SHOW и SHOW TABLES - это команды, которые обычно не используются в большинстве случаев использования
  • Я использую подготовленные рецензии в сочетании с хранимыми процедурами и еще не сталкивался с такими проблемами.

Вы можете использовать следующую команду для включения кэширования запросов:

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

Эта команда доступна только из PHP 5.1.3.

2 голосов
/ 06 июня 2011

Подготовленные операторы ДОЛЖНЫ использовать кеш запросов, но у него есть условия:

Из документа 5.1:

До MySQL 5.1.17 подготовленные операторы не использовали кэш запросов. Начиная с 5.1.17, подготовленные операторы используют кеш запросов при определенных условиях, которые различаются в зависимости от метода подготовки:

  • Заявления, которые выдаются с использованием двоичного протокола с использованием mysql_stmt_prepare () и mysql_stmt_execute ().
  • Заявления, которые выдаются с использованием текстового (недвоичного) протокола, используя PREPARE и EXECUTE. См. Раздел 12.6 «Синтаксис SQL для подготовленных операторов».

Который 5.5 Doc повторяет как:

Подготовленные операторы, которые выдаются с использованием двоичного протокола с использованием mysql_stmt_prepare () и mysql_stmt_execute (), подвержены ограничениям на кэширование. Сравнение с операторами в кеше запросов основано на тексте оператора после раскрытия? маркеры параметров. Оператор сравнивается только с другими кэшированными операторами, которые были выполнены с использованием двоичного протокола. То есть для целей кэширования запросов подготовленные операторы, выданные с использованием двоичного протокола, отличаются от подготовленных операторов, выданных с использованием текстового протокола.

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