问题
For some reason the pdo_mysql PHP extension, on our hosted server, fails to run a query that uses a MySQL view, with this error message.
SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared
(There is a discussion on Bug #42041 Prepared-Statement fails when MySQL-Server under load, as well as numerous questions on Stack Overflow.)
For some reason, the query using the view runs just fine, if we switch to using the nd_pdo_mysql extension, which is for the MySQL Native Driver (mysqlnd).
What is the difference between pdo_mysql and nd_pdo_mysql? Why would one be chosen over the other one?
Thanks.
回答1:
To connect to your MySQL server from PHP, there are two versions of drivers:
mysqlndlibmysql
In order to connect to your MySQL server using mysqlnd driver, you use the nd_pdo_mysql extension, as seen in below screenshot.
Since libmysql returns numeric types as strings, I use mysqlnd with nd_pdo_mysql in order to get native/strict data, so that numeric types are NOT returned as Strings.
From the MySQL official website: https://dev.mysql.com/downloads/connector/php-mysqlnd/
The MySQL native driver for PHP
mysqlndis a drop-in replacement for the MySQL Client Librarylibmysqlfor the PHP script language.
来源:https://stackoverflow.com/questions/46414868/what-is-the-difference-between-the-nd-pdo-mysql-and-pdo-mysql-extensions