【发布时间】:2015-03-31 10:43:54
【问题描述】:
我知道如何获取 mysql-row 并将其转换为 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
【问题讨论】:
-
你为什么要这么做?
-
在这种情况下,将您的值转换为 javascript 代码:parseInt、parseFloat。
-
javascript 代码中的同样问题。此外,我通过发送不必要的“-chars”来浪费流量。
-
您可以在循环中使用
mysqli_fetch_field()从结果集中获取有关每一列的信息,并使用它来了解您是否需要将值转换为数字或将其保留为字符串。但我认为在使用之前在 javascript 中将值转换为int或float(根据需要)更容易。 -
遍历对象并进行相应的转换。我会使用 sscanf