PHP JSON_ENCODE 无法显示超过 1000 个 MySQL 表字段

标签 php mysql json

我在 PHP 中回显 MySQL 记录的 1000 多个字段时遇到问题。我希望它们用 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 数组内。

但是,如果将变量“$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 对象,这就是问题所在。

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

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

我修改了 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值。(一点进步)

最佳答案

主要问题是我的 PHP 代码没有验证 MySQL 记录是否以 UTF-8 编码。如果存在未以 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);
?>

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

关于PHP JSON_ENCODE 无法显示超过 1000 个 MySQL 表字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35549019/

相关文章:

php - if语句放错地方了

php - 非常长的 json 响应停止并以文本形式发送 HTTP header ,然后继续

php - 在 laravel 4 中使用 phpunit 测试 POST

sql - 使用 JSON_VALUE 访问 SQL Server 2016 中的 JSON 数组

php - 使用 Node.js 与 PHP 有什么优势

php - Yii Joined table 但不是所有选定的数据都被检索

php 删除或删除 mysql 的额外列/逗号分隔

PHP 和 SQLite 没有这样的文件或目录?

javascript - 如何将mysql datetime传递给输入datetime-local

php - 选择包含非 ASCII 字符的行