使用带有MySQLi的fetch_array时检测数据类型

时间:2013-05-10 04:13:04

标签: 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()){
    echo var_dump($row);
}

我获得关联数组,其中所有值都是string类型。

哪种方法是检测列类型(VARCHAR,DATETIME,INT,FLOAT)并使用正确的键入(字符串,整数,null)填充关联数组(或创建唯一的关联数组)?

在返回结果json_encode d以进行进一步的客户端处理时,这非常有用。

非常感谢你的帮助

2 个答案:

答案 0 :(得分:3)

首先,你提出了错误的问题 您实际上不需要列类型。事实上,您可以使用简单的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

答案 1 :(得分:0)

按如下方式查询information_schema.columns表:

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

假设您的表是tbl1并且有问题的列是keycol。但是,json_encode可能会让你的生活变得更轻松,也可能是无限的。