在 MySQLi 中使用 fetch_array 时检测数据类型
Posted
技术标签:
【中文标题】在 MySQLi 中使用 fetch_array 时检测数据类型【英文标题】:Detect data type while using fetch_array with MySQLi 【发布时间】:2013-05-04 17:07:55 【问题描述】:同时使用 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)并使用正确的类型(字符串、整数、空值)填充关联数组(或创建唯一关联数组)的最优雅方法是什么?
这在返回结果json_encode
d 以供进一步的客户端处理时非常有用。
非常感谢您的帮助
【问题讨论】:
只是好奇,为什么要使用 heredoc 来定义查询?<<<SQL
比 "
大 5 个符号。有什么好处?
我只是在玩这个例子,codular.com/php-mysqli我没有什么特别的好处
【参考方案1】:
首先,你问错了问题。 您实际上并不需要列类型。事实上,您已经可以通过简单的 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
【讨论】:
完美,谢谢。我编辑了一点代码以使用面向对象的形式!【参考方案2】:查询information_schema.columns表如下:
SELECT DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_NAME = 'tbl1' AND COLUMN_NAME = 'keycol'
假设您的表是 tbl1 并且有问题的列是 keycol。然而,json_encode 可能会让你的生活更轻松,而且可能无限地让我感到震惊。
【讨论】:
这是丑陋的技术,但它为您提供了架构定义。以上是关于在 MySQLi 中使用 fetch_array 时检测数据类型的主要内容,如果未能解决你的问题,请参考以下文章
mysqli - 对非对象 mysqli 上的成员函数 fetch_array() 的 fetch_Array 错误调用 [重复]