2015-02-08 3 views
0

Выход php -i | grep mysqlnd является:Mysqlnd родной драйвер не работает, даже если загружен

Client API версии => mysqlnd 5.0.11-DEV - 20120503 - $ Id: 40933630edef551dfaca71298a83fad8d03d62d4 Клиент библиотеки API версии => mysqlnd 5.0.11-DEV - 20120503 - $ Id: 40933630edef551dfaca71298a83fad8d03d62d4 mysqlnd mysqlnd => включен Version => mysqlnd 5.0.11-DEV - 20120503 - Id: 40933630edef551dfaca71298a83fad8d03d62d Loaded плагины => mysqlnd, debug_trace, auth_plugin_mysql_native_password, auth_plugin_mysql_clear_password статистика mysqlnd => Client API версии => mysqlnd 5.0.11-DEV - 20120503 - $ Id: 40933630edef551dfaca71298a83fad8d03d62d4

enter image description here

Который предполагает, что загружен 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 

Am I отсутствуют некоторые конфигурации/предложения?

+0

Так покажите нам кусок кода и сообщения об ошибке, пожалуйста, есть :-) – Alex

+0

@KimAlexander я добавил некоторый код. Не очень много для этого. Драйвер mysqlnd должен автоматически конвертировать в типы данных PHP, где это возможно, но это не так. Они все еще выходят как строки, хотя в соответствии с PHP mysqlnd загружен и включен. –

+0

вы всегда получите строки, я думаю, что причина в том, что родной SQL-движок, когда он возвращает данные, нет никакой дополнительной информации о каждом столбце, просто данные. так что это всегда строки, либо для datestamp. Вы видели какую-либо другую информацию через Интернет? если вы видели какой-либо пример, если php-код показывает, что mysqli возвращает INT или DATE формально - покажите мне пожалуйста :-) – Alex

ответ

0

Так что кажется, что 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 
Смежные вопросы