【发布时间】: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"=>$arr_retrieve[$i]));移到while循环之外并将其编码为echo json_encode(array("result"=>$arr_retrieve));这将向浏览器发送一个JSON字符串而不是1700个小字符串 -
在更新后的代码中,您必须将
$arr_retrieve = array();放在循环之外,否则您将始终只得到最后一行。