【问题标题】:Mysqlnd native driver not working even though loaded即使已加载,Mysqlnd 本机驱动程序也无法正常工作
【发布时间】:2015-02-08 15:22:01
【问题描述】:

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 统计 => 客户端 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

我是否缺少一些配置/任何建议?

【问题讨论】:

  • 所以请给我们看一段代码和你的错误信息:-)
  • @KimAlexander 我添加了一些代码。不是很喜欢它。 mysqlnd 驱动程序应尽可能自动转换为 PHP 数据类型,但事实并非如此。即使根据 PHP 加载并启用了 mysqlnd,它们仍然以字符串形式出现。
  • 你总是会得到字符串,我认为原因是原生sql引擎,当它返回数据时,没有关于每一列的附加信息,只有数据。所以它总是字符串,无论是日期戳。您在互联网上看到任何其他信息吗?如果你看到任何例子,如果 php 代码显示 mysqli 返回 INT 或 DATE 正式 - 请告诉我:-)
  • @KimAlexander 请阅读 mysqlnd 驱动程序的用途。正是因为这个原因。它与 PHP 紧密耦合,因此它可以检测 mysql 数据类型并转换为 PHP 类型。

标签: php mysql mysqlnd


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多