Care este diferența dintre extensiile nd_pdo_mysql și pdo_mysql? (Programare, Php, Mysql, Pdo)

user2340816 a intrebat.

Dintr-un motiv oarecare, extensia pdo_mysql pe serverul nostru găzduit, nu reușește să ruleze o interogare care utilizează o vizualizare MySQL, cu acest mesaj de eroare.

SQLSTATE[HY000]: Eroare generală: 1615 Instrucțiunea pregătită trebuie să fie pregătită din nou.

(Există o discuție pe Bug #42041 Prepared-Statement eșuează atunci când serverul MySQL este sub sarcină, precum și numeroase întrebări pe Stack Overflow).

Dintr-un motiv oarecare, interogarea care utilizează vizualizarea rulează foarte bine, dacă trecem la utilizarea nd_pdo_mysql extensie, care este pentru driverul nativ MySQL (mysqlnd).

Care este diferența dintre pdo_mysql și nd_pdo_mysql? De ce ar fi ales unul în locul celuilalt?

Mulțumesc.

Comentarii

  • Acest lucru ar putea fi de ajutor: secure.php.net/manual/en/mysqlnd.overview.php –  > Por Hayden Schiff.
  • @HaydenSchiff, mulțumesc, dar articolul legat pare să nu se refere la driverele pdo. Mai există vreun ajutor cu privire la diferențele dintre driverele pdo_mysql și nd_pdo_mysql? –  > Por user2340816.
  • Nu sunt familiarizat cu termenul „nd_pdo_mysql”. Bibliotecile backend sunt în mod normal compilate în PHP, nu este ceva ce poți alege în timpul execuției. Folosiți vreo distribuție PHP de la o terță parte? –  > Por Álvaro González.
  • Pentru oricine caută pe Google aici: nd_pdo_mysql pare a fi o extensie personalizată și conectabilă oferită de către cPanel platforma de găzduire pentru a opta pentru driverul nativ MySQL în timpul execuției. În configurările obișnuite ale PHP, driverul MySQL este ales în timpul compilării și nu poate fi schimbat ulterior, astfel pdo_mysql este singura extensie disponibilă și nu implică nimic cu privire la driver. –  > Por Álvaro González.
1 răspunsuri
AamirR

Pentru a vă conecta la serverul MySQL din PHP, există două versiuni de drivere:

  1. mysqlnd
  2. libmysql

Pentru a vă conecta la serverul MySQL utilizând mysqlnd utilizați driverul nd_pdo_mysql așa cum se vede în captura de ecran de mai jos.

Deoarece libmysql returnează tipurile numerice ca șiruri de caractere, eu folosesc mysqlnd cu nd_pdo_mysql pentru a obține date native/strict, astfel încât tipurile numerice să fie NU returnate ca șiruri de caractere.

De pe site-ul oficial MySQL:https://dev.mysql.com/downloads/connector/php-mysqlnd/

Driverul nativ MySQL pentru PHP mysqlnd este un înlocuitor direct pentru biblioteca client MySQL libmysql pentru limbajul de script PHP.

Comentarii

  • > Deoarece libmysql returnează tipurile numerice ca șiruri de caractere, folosesc mysqlnd cu nd_pdo_mysql pentru a obține date native/stricte, astfel încât tipurile numerice să NU fie returnate ca șiruri de caractere. —– Nu am găsit aceste informații în altă parte și mă bucur că acum înțeleg de ce cineva ar alege să folosească nd_pdo_mysql în loc de pdo_mysql. Vă mulțumesc. –  > Por user2340816.
  • La ce software aparține această captură de ecran? –  > Por Álvaro González.
  • Este de la cPanel –  > Por AamirR.
  • Un răspuns foarte util, de asemenea, nu uitați să setați PDO::ATTR_EMULATE_PREPARES = false și PDO::ATTR_STRINGIFY_FETCHES = false în opțiunile PDO –  > Por user356417.

Tags:, ,