$row); } print-6ren">
gpt4 book ai didi

php - json_encode() 方法有内存限制吗?

转载 作者:行者123 更新时间:2023-11-29 06:16:22 25 4
gpt4 key购买 nike

我正在尝试回显一个由数组组成的 json 编码数组,但我不知道它不允许我打印那个东西。这是我的代码:

<?php

include_once('confi.php');
header('Content-type: application/json');

if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$lastRecord = isset($_POST['lastRecordID']) ?
mysql_real_escape_string($_POST['lastRecordID']) : "";

$queryForTotalRec = mysql_query("SELECT customer_id FROM `WebServiceTesting`.`sapphire` ORDER BY customer_id DESC LIMIT 1");
$total_rec = mysql_fetch_row($queryForTotalRec);

if($total_rec){
$queryForAllRecords = "SELECT * FROM `WebServiceTesting`.`sapphire` WHERE customer_ID BETWEEN %d AND %d";
$get_all_recs = mysql_query(sprintf($queryForAllRecords, $lastRecord, $total_rec[0]));

$json = array();
while($row = mysql_fetch_assoc($get_all_recs)){

$json[] = array("Status" => 1, "NewRecord" => $row);
}

print_r($json);
echo json_encode($json);
}else{
$json = array("status" => 0, "Error_Message" => mysql_error());
echo json_encode($json);
}
}else{

$json = array("status" => 0, "Error_Message" => "Request Method not correct");
echo json_encode($json);

}
@mysql_close($conn);

错误:格式错误的 JSON:意外的“A”有时是“I”

当我删除 print_r 行时,我得到:没有收到回复当我打印 $json 数组的计数时,我得到的计数是 153,但没有其他输出。

我尝试过的事情:

我阅读了一些您需要使用 array_values() 的类似问题的解决方案例如:

 echo json_encode(array_values($json));

相同的响应:“未收到响应”

我还尝试将 echo $json 放入循环中,我知道这在概念上是错误的,但仍然得到预期的错误“语法错误”

此外,我尝试通过 foreach 进行回显,没有运气语法错误,但我可以看到原始输出,但无法验证 json。

仅针对 print_r 上的信息,这是响应:

Array (
[0] => Array (
[Status] => 1 [NewRecord] => Array (
[customer_id] => 1241
[firstName] => Katy
[lastName] => Lest
[email] => klest@yahoo.com [phone] => 787012425
)
)
[1] => Array (
[Status] => 1 [NewRecord] => Array (
[customer_id] => 1242
[firstName] => Hanah
[lastName] => Morrisn
[email] => road@gmail.com
[phone] => 144221275 )
)
[2] => Array (
[Status] => 1 [NewRecord] => Array (
[customer_id] => 1243
[firstName] => James
[lastName] => McGrath
[email] => rosamcgrath@hotmail.com
[phone] => 79684312 )
)
)

刚刚找到了一个答案,如果有人可以提供帮助,我仍在寻找原因。我拉取的记录数量超过 150 条,所以我一次只尝试了 50 条记录,而且效果很好。任何人都知道我实际上如何才能为我的数组分配更多内存,以便它可以同时保存所有必需的数据?

我也尝试过提供准确的索引,我认为数组内存不足,但这甚至不起作用:

 $json = new SplFixedArray($difference);

非常感谢您的协助。

最佳答案

刺入黑暗:您的某些数据库行包含非 ASCII 字符(例如 ü、é 等)。您的数据库连接设置为 latin1,因此数据不是 UTF-8 编码的。 json_encode 需要 UTF-8 编码的数据。如果您获取足够多的行,就会有包含此类非 UTF-8 数据的行,并且 json_encode 会失败。如果行数足够少,您碰巧不会碰到那些有问题的行。

通过在 json_encode 之后输出 echo json_last_error_msg(); 来测试它。

将您的数据库连接设置为 UTF-8。请参阅此处如何操作:UTF-8 all the way through

当您包含 print_r 时,您的浏览器提示无效 JSON 的原因很简单:因为 PHP 会输出大量非 JSON 的垃圾,浏览器无法将其解码为 JSON .

关于php - json_encode() 方法有内存限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35699154/

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