我在 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/