【问题标题】:PHP JSON_ENCODE doesn't work to show more than 1000 fields of MySQL table [duplicate]PHP JSON_ENCODE 无法显示 MySQL 表的 1000 多个字段[重复]
【发布时间】:2016-02-22 08:33:52
【问题描述】:

我在 PHP 中回显 1000 多个 MySQL 记录字段时遇到问题。我希望它们用 JSON 编码。我有 2 张桌子,每张桌子都有 4 列。第一个表名为“contact_anggablokj6”,它有 243 行(字段数:4x243=972 个字段)。第二个表名为“contact_luthfir272”,有 448 行(字段数:4x448=1792 个字段)。起初,我收到了类似这篇文章中的警告:Warning: a form on this page has more than 1000 fields PHP MySql。我在那篇文章中尝试了解决方案,我不再收到任何警告,但我仍然无法回显超过 1000 个字段。我做了2个PHP代码,第一个看起来像这样:

<?php
include ('db_connect.php');
ini_set('max_input_vars', 5000);

$user_sxyzID='anggablokj6@sxyz.com';
$j = strpos($user_sxyzID,"@");
$trimmed_sxyzid = substr($user_sxyzID, 0, $j);

$arr_retrieve = array();

$sql_retrieve="SELECT * FROM contacts_$trimmed_sxyzid";

$retrieved = mysql_query($sql_retrieve);

$i=0;

while($row=mysql_fetch_array($retrieved)){
    $arr_retrieve[$i] = array(
      "contact_id" => $row['contact_ID'],
      "contact_name" => $row['contact_name'],
      "contact_phone" => $row['contact_phone'],
      "contact_email" => $row['contact_email']
    );
    $i++;
}
echo json_encode(array("result"=>$arr_retrieve));

mysql_close($con);
?>

结果是正确的,所有的 JSON 对象都在一个 JSON Array 中。

但是,如果将变量“$user_sxyzID”的值更改为“luthfir272@sxyz.com”,它与具有 1700 字段的表“contact_luthfir272”相关,则结果不会显示任何内容(也没有错误或警告)。然后我做了第二个 PHP 代码,它看起来像这样:

<?php
include ('db_connect.php');
ini_set('max_input_vars', 5000);

$user_sxyzID='anggablokj6@sxyz.com';
$j = strpos($user_sxyzID,"@");
$trimmed_sxyzid = substr($user_sxyzID, 0, $j);

$arr_retrieve = array();

$sql_retrieve="SELECT * FROM contacts_$trimmed_sxyzid";

$retrieved = mysql_query($sql_retrieve);

$i=0;

while($row=mysql_fetch_array($retrieved)){
    $arr_retrieve[$i] = array(
      "contact_id" => $row['contact_ID'],
      "contact_name" => $row['contact_name'],
      "contact_phone" => $row['contact_phone'],
      "contact_email" => $row['contact_email']
    );
    echo json_encode(array("result"=>$arr_retrieve[$i]));
    $i++;
}

mysql_close($con);
?>

它适用于两个表,但结果只是 JSON 对象,这就是问题所在。

我应该怎么做才能得到类似“anggablokj6@sxyz.com”用户 ID 的结果(所有 JSON 对象都在 JSON 数组中)对于“luthfir272@sxyz.com”用户 ID?

------------------更新-------------- ----------------------------------------

我把PHP代码修改成这样:

<?php
header('Content-type: application/json');
include ('db_connect.php');
ini_set('max_input_vars', 5000);
ini_set('post_max_size', '16M');

$user_sxyzID='luthfir272@sxyz.com';
$j = strpos($user_sxyzID,"@");
$trimmed_sxyzid = substr($user_sxyzID, 0, $j);

$sql_retrieve="SELECT * FROM contacts_$trimmed_sxyzid";

$retrieved = mysql_query($sql_retrieve);

$i=0;

$arr_retrieve = array();

if(mysql_num_rows($retrieved)>0){
 while($row=mysql_fetch_assoc($retrieved)){
    $arr_retrieve[$i] = array(
      "contact_id" => $row['contact_ID'],
      "contact_name" => $row['contact_name'],
      "contact_phone" => $row['contact_phone'],
      "contact_email" => $row['contact_email']
    );         
    $i++;
 }

 echo json_encode($arr_retrieve);

 switch (json_last_error()) {
    case JSON_ERROR_NONE:
        echo ' - No errors';
    break;
    case JSON_ERROR_DEPTH:
        echo ' - Maximum stack depth exceeded';
    break;
    case JSON_ERROR_STATE_MISMATCH:
        echo ' - Underflow or the modes mismatch';
    break;
    case JSON_ERROR_CTRL_CHAR:
        echo ' - Unexpected control character found';
    break;
    case JSON_ERROR_SYNTAX:
        echo ' - Syntax error, malformed JSON';
    break;
    case JSON_ERROR_UTF8:
        echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
    break;
    default:
        echo ' - Unknown error';
    break;
  }
}else{
echo "There's no data found.";
}

结果显示 MySQL 表最后一行的一行,并返回 JSON_ERROR_NONE 值。(有点进步)

【问题讨论】:

  • 每个用户都有一个新表?为什么?!为什么不能只有 1 个表和一个名为“所有者”的字段,即用户名?
  • 先生您好!今晚这家餐厅有 60 张桌子和 60 位客人,所以恐怕我们都订满了。
  • json_encode 如果存在未在 utf-8 中编码的字符,则会中断
  • 不确定这是否是完整的解决方案,但将echo json_encode(array("result"=&gt;$arr_retrieve[$i]));移到while循环之外并将其编码为echo json_encode(array("result"=&gt;$arr_retrieve));这将向浏览器发送一个JSON字符串而不是1700个小字符串
  • 在更新后的代码中,您必须将$arr_retrieve = array(); 放在循环之外,否则您将始终只得到最后一行。

标签: php mysql json


【解决方案1】:

主要问题是我的 PHP 代码没有验证要以 UTF-8 编码的 MySQL 记录。如果存在未以 UTF-8 编码的数据,则 json_encode() 将崩溃。因此,正如 Undefined_variable 和 Aioros 所建议的那样,确保所有以 UTF-8 编码的数据都使用 json_encode()。这是正确的脚本,它会告诉你使用 json_encode() 时是否有问题。

<?php
//check if there's something wrong with json_last_error():
switch (json_last_error()) {
case JSON_ERROR_NONE:
    echo ' - No errors';
break;
case JSON_ERROR_DEPTH:
    echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
    echo ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
    echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
    echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
    echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
    echo ' - Unknown error';
break;
}
}else{
  echo "There's no data found.";
}

mysql_close($con);
?>

希望对其他人有用。谢谢大家帮助我。

【讨论】:

    猜你喜欢
    • 2016-10-23
    • 2012-05-13
    • 2019-06-01
    • 2013-01-22
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 2021-11-28
    相关资源
    最近更新 更多