В чем разница между расширениями nd_pdo_mysql и pdo_mysql?

По какой-то причине PHP-расширение pdo_mysql на нашем размещенном сервере не может выполнить запрос, использующий представление MySQL, с этим сообщением об ошибке.

SQLSTATE [HY000]: общая ошибка: 1615 Подготовленный оператор необходимо повторно подготовить

(Существует обсуждение Ошибка #42041 Подготовленный отчет завершается ошибкой, когда сервер MySQL находится под нагрузкой, а также многочисленные вопросы о переполнении стека.)

По какой-то причине запрос с использованием представления выполняется нормально, если мы переключимся на использование расширения nd_pdo_mysql, которое предназначено для встроенного драйвера MySQL (mysqlnd).

В чем разница между pdo_mysql и nd_pdo_mysql? Почему одно предпочтительнее другого?

Спасибо.


person user2340816    schedule 25.09.2017    source источник
comment
Это может помочь: secure.php.net/manual/en/mysqlnd.overview. php   -  person Hayden Schiff    schedule 26.09.2017
comment
@HaydenSchiff, спасибо, но связанная статья, похоже, не относится к драйверам pdo. Есть ли еще помощь с различиями между драйверами pdo_mysql и nd_pdo_mysql?   -  person user2340816    schedule 02.10.2017
comment
Я не знаком с термином nd_pdo_mysql. Бэкэнд-библиотеки обычно компилируются в PHP, это не то, что вы можете выбрать во время выполнения. Используете ли вы какой-либо сторонний дистрибутив PHP?   -  person Álvaro González    schedule 11.10.2017
comment
Для тех, кто ищет здесь: nd_pdo_mysql выглядит как пользовательское подключаемое расширение, предоставляемое хостинговой платформой cPanel для выбора -в родном драйвере MySQL во время выполнения. В обычных установках PHP драйвер MySQL выбирается в во время компиляции и его нельзя изменить впоследствии, поэтому pdo_mysql является единственным доступным расширением и ничего не говорит о драйвере.   -  person Álvaro González    schedule 13.10.2017


Ответы (1)


Для подключения к вашему серверу MySQL из PHP есть две версии драйверов:

  1. mysqlnd
  2. libmysql

Чтобы подключиться к вашему серверу MySQL с помощью драйвера mysqlnd, вы используете расширение nd_pdo_mysql, как показано на снимке экрана ниже.

введите описание изображения здесь

Поскольку libmysql возвращает числовые типы в виде строк, я использую mysqlnd с nd_pdo_mysql для получения собственных/строгих данных, чтобы числовые типы НЕ возвращались в виде строк.

С официального сайта MySQL: https://dev.mysql.com/downloads/connector/php-mysqlnd/

Собственный драйвер MySQL для PHP mysqlnd является заменой клиентской библиотеки MySQL libmysql для языка сценариев PHP.

person AamirR    schedule 11.10.2017
comment
› Поскольку libmysql возвращает числовые типы в виде строк, я использую mysqlnd с nd_pdo_mysql для получения собственных/строгих данных, чтобы числовые типы НЕ возвращались в виде строк. ----- Я не нашел эту информацию в другом месте, и теперь я рад, что понял, почему можно было бы использовать nd_pdo_mysql вместо pdo_mysql. Спасибо. - person user2340816; 11.10.2017
comment
Какой программе принадлежит этот скриншот? - person Álvaro González; 12.10.2017
comment
Это из cPanel - person AamirR; 12.10.2017
comment
Очень полезный ответ, также не забудьте установить PDO::ATTR_EMULATE_PREPARES = false и PDO::ATTR_STRINGIFY_FETCHES = false в параметрах PDO - person user356417; 25.03.2018