使用正确的类型将mysql结果转换为json

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

$row = mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM table WHERE id=1"));

echo json_encode($row); // it's an ajax-call

但:

数据库行具有不同的类型,例如int,float,string。通过使用json_encode()进行转换,所有结果都是字符串。

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

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

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

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

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

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

但我不能,因为:

  • 行还具有数字以外的其他类型(字符串,日期)
  • 有很多列
  • 设计在开发人员中,因此列名经常更改

在此先感谢,并请原谅我的英语不好:-)

(回答来自卡西米尔等伊波利特评论道题):

我使用ajax将此php代码称为动态获取sql值。在我的javascript代码中,我使用如下结果:

result['intvalue1'] += 100;

让说intval1的JSON-结果是50,计算出的结果是:

“ 50100”,而不是150

回答:

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

它使用该函数mysqli_fetch_field()获取有关结果集各列的信息,并将具有数字类型的那些列转换为数字。值MYSQLI_TYPE_*常量中可以找到的文档页面的mysqli预定义的常量。

// 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");

以上是 使用正确的类型将mysql结果转换为json 的全部内容, 来源链接: utcz.com/qa/430798.html

回到顶部