gpt4 book ai didi

php - 将 mysql 结果转换为具有正确类型的 json

转载 作者:可可西里 更新时间:2023-11-01 07:17:56 24 4
gpt4 key购买 nike

我知道如何获取 mysql 行并将其转换为 json:

$row = mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM table WHERE id=1"));
echo json_encode($row); // it's an ajax-call

但是:

db-row 有不同的类型,如 int、float、string。通过使用 json_encode() 转换它,所有结果都是字符串。

有没有比这更好的纠正类型的方法:

$row['floatvalue1'] = 0+$row['floatvalue1'];
$row['floatvalue2'] = 0+$row['floatvalue2'];
$row['intvalue1'] = 0+$row['intvalue1'];

我想遍历键并添加 0 因为:

  • 第一个编码规则:DRY - 不要重复自己

但我不能因为:

  • 行也有数字以外的其他类型(字符串、日期)
  • 有很多列
  • 设计处于开发阶段,因此列名经常更改

提前致谢,请原谅我的英语不好:-)

编辑(回答来自 Casimir et Hippolyte 的评论问题):

我使用 ajax 调用此 php 代码以动态获取 sql 值。在我的 javascript 代码中,我使用这样的结果:

result['intvalue1'] += 100;

假设intval1的json-result为50,计算结果为:

“50100”,不是 150

最佳答案

下面的代码只是一个概念证明。它需要封装在一个函数/方法中,并在生产中使用它之前进行一些润色(例如,在循环中调用 mysqli_fetch_field() 并在处理任何行之前存储它返回的对象,而不是每行一次)。

它使用函数 mysqli_fetch_field()获取有关结果集每一列的信息,并将那些具有数字类型的列转换为数字。 MYSQLI_TYPE_* 的值常量可以在 Mysqli predefined constants 的文档页面中找到.

// Get the data
$result = mysqli_query($db, "SELECT * FROM table WHERE id=1");
$row = mysqli_fetch_assoc($result);

// Fix the types
$fixed = array();
foreach ($row as $key => $value) {
$info = mysqli_fetch_field($result);
if (in_array($info->type, array(
MYSQLI_TYPE_TINY, MYSQLI_TYPE_SHORT, MYSQLI_TYPE_INT24,
MYSQLI_TYPE_LONG, MYSQLI_TYPE_LONGLONG,
MYSQLI_TYPE_DECIMAL,
MYSQLI_TYPE_FLOAT, MYSQLI_TYPE_DOUBLE
))) {
$fixed[$key] = 0 + $value;
} else {
$fixed[$key] = $value;
}
}

// Compare the results
echo('all strings: '.json_encode($row)."\n");
echo('fixed types: '.json_encode($fixed)."\n");

关于php - 将 mysql 结果转换为具有正确类型的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28261613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com