Php 在MySQLi中使用fetch_数组时检测数据类型

Php 在MySQLi中使用fetch_数组时检测数据类型,php,mysql,json,types,mysqli,Php,Mysql,Json,Types,Mysqli,在使用MySQLI获取数组时 $sql = <<<SQL SELECT * FROM `users` WHERE `live` = 1 SQL; if(!$result = $db->query($sql)){ die('There was an error running the query [' . $db->error . ']'); } while($row = $result->fetch_assoc()){

在使用MySQLI获取数组时

$sql = <<<SQL
    SELECT *
    FROM `users`
    WHERE `live` = 1 
SQL;

if(!$result = $db->query($sql)){
    die('There was an error running the query [' . $db->error . ']');
}

while($row = $result->fetch_assoc()){
    echo var_dump($row);
}
$sql=fetch\u assoc()){
echo var_dump($row);
}
我获得关联数组,其中所有值的类型均为
string

检测列类型(VARCHAR、DATETIME、INT、FLOAT)并用正确的类型(string、integer、null)填充关联数组(或创建唯一的关联数组)的最优雅的方法是什么

当返回结果
json\u encode
d以进行进一步的客户端处理时,这将非常有用


非常感谢您的帮助

按如下方式查询信息\u schema.columns表:

SELECT DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_NAME = 'tbl1' AND COLUMN_NAME = 'keycol'

假设您的表是tbl1,而所讨论的列是keycol。然而,我确实觉得这可能会让你的生活变得更轻松,而且可能会无限轻松。

首先,你问错了问题。
实际上,您不需要列类型。事实上,您已经可以通过简单的PHP条件来区分字符串和数字。但这两个方法都不会告诉您NULL

试试这个

$sql = "SELECT * FROM users WHERE live = 1";
$stm = $db->prepare($sql) or trigger_error($db->error);
$stm->execute() or trigger_error($db->error);
$res = $stm->get_result();
$row = mysqli_fetch_assoc($res);
如果幸运的话,您可以设置所有类型。

如果没有-您需要在PHP中启用mysqlnd

只是好奇,为什么要使用herdoc来定义查询<代码>我只是在玩这个例子,我没有具体的好处这是丑陋的和技术性的,但它为您提供了模式定义。太好了,谢谢。我编辑了一点代码,使用面向对象的形式!