Вопрос по php, mysql – Что такое подготовленные заявления на стороне клиента?

21

Попытка узнать что-то новое - в частности, пытаться выбрать, использовать лиMySQLi или жеPDO для будущих проектов при работе с MySQL - наткнулся наэта страница который показывает обзор доступных мне опций.

Внизу этой страницы находится таблица, в которой сравниваются функциональные возможности трех основных способов общения с MySQL. В строке & quot;API supports client-side Prepared Statements& quot ;, он говорит, что PDO поддерживает это, а MySQLi 'не поддерживает.

Я знаю, что готовят заявления. Ответ наэтот вопрос это простой пример того, что я считаю подготовленными на стороне сервера заявлениями. А PHP - это серверный язык, что, в свою очередь, должно означать, что не имеет значения, доступны ли подготовленные операторы на стороне клиента или нет. Но это заставляет меня задуматься, почему это даже указано в руководстве по PHP.

Так что же такое готовые заявления на стороне клиента?

Скорее всего, это относится кPDO::ATTR_EMULATE_PREPARES- настройка, которая имитирует подготовленные операторы с интерполяцией и экранированием. Это делается в библиотеке, так технически на стороне клиента, до того, как запросы будут переданы на сервер БД. mario
@MattFenwick Хотя это может иметь смысл, это не объясняет, почему в той же таблице показана поддержка подготовленных операторов на стороне сервера, как для всех библиотек, но только одна из них поддерживает сторону клиента, если мы принимаем предпосылку, что PHP является клиентом , Repox
Я предполагаю, что он использует клиент / сервер в другом контексте, нежели веб-модель - то есть MySQL - это сервер, а PHP - это клиент в этом контексте. Даже если они оба на одном компьютере. Matt Fenwick

Ваш Ответ

3   ответа
28

что подготовленные операторы на стороне клиента - это операторы, подготовленные клиентом, а не сервером.

PDO - это уровень абстракции доступа к данным, который поддерживает несколько интерфейсов (драйверов) СУБД, некоторые из которых поддерживают подготовленные операторы на стороне сервера (например, MySQL 4.1+), некоторые из которых не поддерживают (например, MySQL 3).

Если драйвер PDO не поддерживает подготовленные операторы на стороне сервера, PDOemulate их на стороне клиента и использовать общий интерфейс запросов для их выполнения.

Причина, по которой MySQLi не поддерживает их, проста: MySQLi является специфичным для MySQL расширением, СУБД, которая действительно поддерживает подготовленные операторы на стороне сервера, поэтому нет причин для их эмуляции.

2

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

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

13

в данном случае «клиент» ссылается на PHP и «сервер» в MySQL. PDO поддерживает базы данных, отличные от MySQL. Не все эти драйверы баз данных / базы данных изначально поддерживают подготовленные операторы, и в этих случаях PDO будет эмулировать эти операторы самостоятельно. MySQLi не будет (я не знаю наверняка, когда он должен был бы это сделать - возможно, когда он имеет дело со старым драйвером MySQL?).

Еще один фактор, который вы, возможно, захотите рассмотреть - некоторые PHP-фреймворки требуют PDO и не поддерживают mysqli.

Похожие вопросы