php -i | grep mysqlnd
的输出为:
客户端API版本=> mysqlnd 5.0.11-dev-20120503-$ Id:
40933630edef551dfaca71298a83fad8d03d62d4
客户端API库版本
=> mysqlnd 5.0.11-dev-20120503-$ Id:40933630edef551dfaca71298a83fad8d03d62d4
mysqlnd mysqlnd =>已启用
版本=> mysqlnd 5.0.11-dev-20120503-ID:40933630edef551dfaca71298a83fad8d03d62d
加载的插件=> mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password
mysqlnd statistics =>客户端API版本=> mysqlnd 5.0.11-dev-
20120503-$ Id:40933630edef551dfaca71298a83fad8d03d62d4
这表明它已加载mysqlnd => enabled
,但是所有数据库值仍然以字符串形式出现,而不是转换为本地PHP类型:
$connection = new mysqli('127.0.0.1', 'root', '', 'my_database');
// Settings contains one tinyint field 'enabled'
$result = mysqli_query($connection, 'select * from settings');
var_dump(mysqli_fetch_array($result));
结果
array (size=1)
'enabled' => string '1' (length=1)
预期
array (size=1)
'enabled' => int 1
我是否缺少一些配置/任何建议?
最佳答案
因此,似乎mysqlnd仅在使用PDO时可用。
我将代码更改为使用PDO,并确保关闭了仿真的prepares(否则它仍将返回字符串)。现在,它将转换为PHP数据类型! :-)
$pdo = new PDO('mysql:host=127.0.0.1;dbname=my_database', 'root', '');
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$result = $pdo->query('select * from settings');
var_dump($result->fetch());
结果
array (size=1)
'enabled' => int 1
关于php - Mysqlnd native 驱动程序即使加载也无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28395651/