The output of php -i | grep mysqlnd
is:
Client API version => mysqlnd 5.0.11-dev - 20120503 - $Id: 40933630edef551dfaca71298a83fad8d03d62d4 Client API library version => mysqlnd 5.0.11-dev - 20120503 - $Id: 40933630edef551dfaca71298a83fad8d03d62d4 mysqlnd mysqlnd => enabled Version => mysqlnd 5.0.11-dev - 20120503 - Id: 40933630edef551dfaca71298a83fad8d03d62d Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password mysqlnd statistics => Client API version => mysqlnd 5.0.11-dev - 20120503 - $Id: 40933630edef551dfaca71298a83fad8d03d62d4
Which suggests it's loaded mysqlnd => enabled
however all the database values are still coming out as strings, not converted to native PHP types:
$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));
Result
array (size=1)
'enabled' => string '1' (length=1)
Expected
array (size=1)
'enabled' => int 1
Am I missing some config/any suggestions?
So it seems that mysqlnd is only available when your using PDO.
I've changed my code to use PDO and also ensured that emulated prepares is off (otherwise it still will return strings). Now it converts to PHP data types! :-)
$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());
Result
array (size=1)
'enabled' => int 1