下面有两个函数,它们查询PHP,然后打印json。我在我的本地机器AMPP Apache服务器上尝试了一下,一切都能用Json打印出来。当我在我的主机上尝试时(所有的DB设置,测试都很好),不知何故print json_encode($rows)
在远程主机服务器上没有打印任何内容。
因此,我在下面添加了调试echo sizeof($rows)
,实际上按照预期有8条记录。什么东西print json_encode($rows)
不能打印?如何进一步调试?
function queryPrintJson($cnx, $query) {
$rows=queryReturnJsonArray($cnx, $query);
echo sizeof($rows);
print json_encode($rows);
}
function queryReturnJsonArray($cnx, $query) {
$result=mysqli_query($cnx, $query) or die ("Can't execute query!");
$rows = array();
while($obj = $result->fetch_object()){
$rows[] = $obj;
}
$result->close();
return $rows;
}
p/s:对于另一个数据库,相同的功能在同一个远程主机服务器上工作。它也适用于我的本地主机。
*更新'var_dump(json_encode($rows),json_last_error())'显示bool(false) int(5)
。不知道这意味着什么。
我的查询只是$newsquery = "SELECT * FROM newstbl where Status = 1";
*更新
经过进一步的调试,我发现其中一个字段是description
字段,它有很长的数据。。。如果省略该字段,则一切正常。但如果包括在内,它不会打印出来。
这也可能意味着与UTF-8无关。由于description
都是正常的英文字符。因此,这似乎不像是另一个问题的重复。
p/s:不确定是谁对下面的所有答案投了反对票,因为这确实有助于我的调试。无论谁这样做,都需要负起责任,然后才能对以下答案投反对票。它们都有助于我的调试。
添加一些调试跟踪以了解发生了什么:
function queryPrintJson($cnx, $query) {
$rows=queryReturnJsonArray($cnx, $query);
echo sizeof($rows);
// only for debug
$tmp = json_encode($rows);
var_dump($rows, $tmp);
print json_encode($rows);
}
并检查变量的内容有什么问题。
var_dump($rows)
以确认其中存储有值。我想如果它是空的,那是因为你使用fetch_object()
而不是fetch_assoc()
如果这是正确的,使用:print_r(json_encode($rows,1))
打印出一个关联数组。