Выход из 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, а также убедился, что эмулированная подготовка отключена (в противном случае он по-прежнему будет возвращать строки). Теперь он конвертируется в типы данных 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
Других решений пока нет …