Здравствуйте. Сравниваю два API: MySQLi и PDO. Заинтересовали два момента 1. API поддерживает асинхронные, неблокирующие запросы mysqlnd 2. API поддерживает подготовленные запросы на стороне клиента Что за асинхронные запросы и запросы подготовленные на стороне клиента? В каких случаях они применяются. Данные понятия знакомы, но непонятно как это к PHP привязать...
Теоретик из меня никудышный, поэтому постараюсь объяснить, как могу. 1. Вы знакомы с Ajax? Помните, что запросы можно отправлять синхронно и асинхронно? В первом случае, работа сценария будет блокироваться, браузер зависнет на время выполнения запроса. А во втором случае, можно отправлять несколько запросов параллельно и при этом остальной код будет выполняться не дожидаясь ответа от сервера. 2. Некоторые драйверы не поддерживают подготавливаемые запросы. В таком случае, их можно эмулировать средствами PDO. Я думаю, что именно это имелось в виду под фразой "на стороне клиента". Грубо говоря, если у вас PHP5.3, а до боли нужна функция, например, array_column, то что делаете вы? А вы пишите полифилл, который эмулирует работу этой функции. --- Добавлено --- И да... Не правильная постановка вопроса. И то, и другое - это скорее приимущество, чем средство. Хотя, эмуляцию можно указать на постоянной основе, а можно отдать на усмотрение PDO. Если драйвер не будет поддерживать, то подготовка запроса сбросится автоматом на плечи PDO
1. Да, с ES знаком. Не понимаю как это применяется в PHP при работе с MySQL(например) 2. С подготавливаемыми запросами тоже познакомился, но это доступно как в PDO, так и MySQLi. Что значит подготавливаемые на стороне клиента?
в mysqli очень неудобная реализация подготовленных запросов. но если хотите исследовать именно асинхронные вещи, то это возможно только в рамках mysqli. вот нужно ли — хз. ни разу не видел практического применения этих штук, одни только учебные примеры. --- Добавлено --- про "подготовленные запросы на стороне клиента": в этом контексте клиентом называем сторону PHP, а не браузер конечно а сервер это сервер БД. он физически мождет быть на том же хосте, а может и на другом, не принципиально. настоящие подготовленные запросы всегда серверные. однако PDO по умолчанию эмулирует подготовленные запросы. т.е. реально на сервер отправляется только полностью сформированный текст запроса с уже вкоряченными параметрами. можно это дело изменить, читай официальные доки.
я пока даже и примеров не видел. пока пропущу. о, теперь дошло. в мануале вот как описано: API поддерживает подготовленные запросы на стороне клиента MySQLi - нет PDO - да Вы сами что используете при работе с MySQL? Еще вопрос, кстати: MariaDB полностью совместима с данными API или есть баги?
на стороне клиента это и есть эмуляция подготовленных запросов. по умолчанию PDO эмулирует п.з.. по форме это выглядит как подготовленные запросы, реально же это типа mysqli_real_escape_string, который обернут в более удобную оболочку. настоящие (серверные) подготовленные запросы отличаются тем, что сервер готовит их один раз — "строит план запроса" — а выполняет сколько угодно раз. этим на простых запросах достигается заметный выигрыш в производительности. использую PDO. MySQL/MariaDB — для апи нет разницы. расширения php это всего-лишь транспорт доставки запросов. а разница в дополнительных возможностях самого языка SQL. мария развивается быстрее. на текущий момент у меня нет проектов, где бы я мог позволить себе отказаться от обратной совместмости
какие параметры Вы используете для конструктора? у меня после прочтения документации получилось так PHP: $options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_TIMEOUT => 3 ); try { $dbh = new PDO($dsn, $username, $password, $options); } catch (PDOException $e) { die("Не удалось подключиться: " . $e->getMessage()); } какие опции может еще следует учесть? (в мануале их много. я только эти выделил) Вы как подключение устанавливаете? Также?