为什么 PHP json_encode将代码放在我的 Int 数据类型周围并将它们设置为字符串?[复制]

Why is PHP json_encode putting codes around my Int data types and making them Strings instead? [duplicate]

提问人:Ethan Allen 提问时间:6/28/2021 更新时间:6/28/2021 访问量:222

问:

以下是直接从 MySQL 提取数据的示例代码:

$mysqli = new mysqli('localhost','user','password','myDatabaseName');
$myArray = array();
if ($result = $mysqli->query("SELECT * FROM reviews")) {

    while($row = $result->fetch_array(MYSQLI_ASSOC)) {
            $myArray[] = $row;
    }
    echo json_encode($myArray);
}

$result->close();
$mysqli->close();

问题是值,例如“id”,在我的 JSON 中显示为值。例:IntString

[{
    "id": "1",
    "company": "Joe's Burgers",
    "rating": "Good",
    "affiliate": "0"
}]

在MySQL中,id是一种类型,affiliate是一种类型。如何解决此问题以正确格式化 JSON?这是我所期待的:INTTINYINT

[{
    "id": 1,
    "company": "Joe's Burgers",
    "rating": "Good",
    "affiliate": 0
}]
php mysql json mysqli

评论

0赞 user3783243 6/28/2021
数据类型返回是一个字符串,而不是一个整数。分配到时强制转换为 int$myArray
2赞 deceze 6/28/2021
如果你,你应该已经看到字符串而不是整数,不是吗?所以正确的问题是:如何使用 mysqli 正确获取整数?var_dump($myArray)
0赞 Peter 6/28/2021
stackoverflow.com/questions/1390983/......
1赞 aynber 6/28/2021
添加到您的json_encode中,它将强制将数字作为未加引号的数字JSON_NUMERIC_CHECK
0赞 Bill Karwin 6/28/2021
MySQL支持64位整数和无符号整数,但PHP没有无符号的数据类型,在开发mysqli扩展时,PHP没有64位整数的可靠数据类型。因此,没有办法将所有类型的MySQL整数转换为PHP整数。因此,扩展只是以字符串形式返回所有结果。

答:

-1赞 aynber 6/28/2021 #1

将JSON_NUMERIC_CHECK添加到您的json_encode中,它将强制将数字作为未加引号的数字。

echo json_encode($myArray, JSON_NUMERIC_CHECK);

评论

0赞 deceze 6/28/2021
这有助于将字符串转换为数字。最好首先弄清楚为什么它们是字符串,当它们被认为是整数时......
1赞 RickN 6/28/2021
@deceze PHP中的MySQLi函数处理所有数据类型的字符串,但如果你(&相关)一个数据库字段,你总是会得到一个字符串。它们不像 ORM 那样强制转换值。fetch_assoc()INTEGER
2赞 deceze 6/28/2021
@RickN stackoverflow.com/a/25692758/476
0赞 Dharman 6/28/2021
@RickN 他们只是默认这样做。您可以启用对适当类型的自动类型强制转换,但是如果您使用预准备语句(每个人都应该这样做),则它们将在本机类型中返回