我知道如何获取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
Run Code Online (Sandbox Code Playgroud)
但:
db-row有不同的类型,如int,float,string.通过使用json_encode()转换它,所有结果都是字符串.
是否有更好的方法来纠正类型:
$row['floatvalue1'] = 0+$row['floatvalue1'];
$row['floatvalue2'] = 0+$row['floatvalue2'];
$row['intvalue1'] = 0+$row['intvalue1'];
Run Code Online (Sandbox Code Playgroud)
我想循环键并添加0因为:
但我不能因为:
提前谢谢,请原谅我糟糕的英语:-)
编辑(回答Casimir et Hippolyte的评论问题):
我使用ajax调用这个php代码来获取动态的sql值.在我的javascript代码中,我使用如下结果:
result['intvalue1'] += 100;
Run Code Online (Sandbox Code Playgroud)
假设intval1的json-result为50,计算结果如下:
"50100",而不是150
下面的代码只是一个概念证明.它需要在函数/方法中进行封装,并在生产中使用之前进行一些抛光(mysqli_fetch_field()在循环中调用fe 并在处理任何行之前存储它返回的对象,而不是每行一次).
它使用该函数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");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5491 次 |
| 最近记录: |