Каква е разликата между разширенията nd_pdo_mysql и pdo_mysql?

По някаква причина PHP разширението pdo_mysql на нашия хостван сървър не успява да изпълни заявка, която използва MySQL изглед, с това съобщение за грешка.

SQLSTATE[HY000]: Обща грешка: 1615 Подготвеният израз трябва да бъде подготвен отново

(Има дискусия относно Bug #42041 Prepared-Statement се проваля, когато MySQL-Server е под натоварване, както и множество въпроси относно Stack Overflow.)

По някаква причина заявката, използваща изгледа, работи добре, ако преминем към използване на разширението 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. Backend библиотеките обикновено се компилират в PHP, това не е нещо, което можете да изберете по време на изпълнение. Използвате ли PHP дистрибуция на трета страна?   -  person Álvaro González    schedule 11.10.2017
comment
За всеки, който търси тук в Google: 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 Client Library 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