Подтвердить что ты не робот

Что такое подготовленные на стороне клиента заявления?

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

В нижней части этой страницы находится таблица, сравнивающая функциональность трех основных методов связи с mysql. В строке "API поддерживает подготовленные заявления на стороне клиента" говорится, что PDO поддерживает это, а MySQLi этого не делает.

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

Итак, какие подготовленные заявления на стороне клиента?

4b9b3361

Ответ 1

Очевидно, что подготовленные на стороне клиента операторы являются операциями, которые готовятся клиентом, а не сервером.

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

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

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

Ответ 2

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

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

Ответ 3

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

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