php - 在 MySQLi 中使用 fetch_array 时检测数据类型

标签 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)并使用正确的类型(字符串、整数、空值)填充关联数组(或创建唯一关联数组)的最优雅方法是什么?

这在返回结果 json_encoded 以供进一步客户端处理时非常有用。

非常感谢您的帮助

最佳答案

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

关于php - 在 MySQLi 中使用 fetch_array 时检测数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16475072/

相关文章:

php - 自动提交表单 (cURL)

javascript - ajax 调用后 PHP header 重定向没有设置 $_SESSION 变量

php - 在 MySQL 中获取下一个时间戳

json - 在 Docker Windows 上的 Keycloak 中添加 Realm 时出现意外的服务器错误

php - 谁能提供一些有关 Zend Framework 中表单单元测试的资源?

php - 在数据库更新时重定向用户

java - Java 日历的序列化

java - 如何将类<T>对象的Map转换为json java

php - 如何使用mysql中的count函数选项将行值一一分开

mysql - contains 和 contained in sequelize Where 子句有什么用?