【发布时间】:2016-02-17 14:58:26
【问题描述】:
我正在尝试将查询的结果提取到 PHP 数组中,该查询非常简单,并且正好返回 94 行,该过程运行完美,直到达到一定数量的结果,我通过反复试验发现了这一点,我以为是数据问题,但实际上是 PHP 问题,因为如果我运行查询,数组会清空,但如果我在查询中设置 LIMIT,则进程运行正常,之后的幻数是 37,数组不会获取更多行并且什么都不显示,这就是我正在做的事情:
PD。问题似乎与 Name 字段有关,因为如果我只使用 id 字段,我可以毫无问题地获取 94 行。
$query = "SELECT Name AS DisplayText, id AS Value FROM branches ORDER BY DisplayText ASC LIMIT 37;";
$conn = new mysqli($host, $username, $password, $database);
$res = $conn->query($query);
$rows= array();
while ($row = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
$array['DisplayText'] = $row['DisplayText'];
$array['Value'] = $row['Value'];
array_push($rows,$array);
}
print json_encode($rows);
这种方式可行,但由于查询限制,我被限制为 37 个结果,我需要 94 个结果,但如果我取消限制,我什么也得不到
我尝试过的其他方法得到相同的结果:
$query = "SELECT Name AS DisplayText, id AS Value FROM branches ORDER BY DisplayText ASC LIMIT 37;";
$conn = new mysqli($host, $username, $password, $database);
$res = $conn->query($query);
$rows= array();//rows
while ($row= mysqli_fetch_array($res, MYSQLI_ASSOC)) {
$rows[] = $row;
}
print json_encode($rows);
【问题讨论】:
-
问题必须在您的 SQL 中,删除 LIMIT 永远不会阻止您返回行。如果你在最后加上
echo mysqli_error($conn);,它会说明任何错误吗?此外,将error_reporting(E_ALL);放在文件顶部,以将所有警告和错误输出到网页以进行调试。 -
@Kalkran 是的,我已经尝试了所有我知道的调试方法,起初我认为这是一个数据库问题,我检查了所有地方的错误,我的意思是如果我尝试该表中的任何其他查询或不包括 Name 字段的其他表格一切正常
-
所以您没有收到 any 错误,但没有收到 any 数据?
LIMIT38 的查询是否有效? 39? 50、60? 94? -
@Kalkran 如果我在没有 LIMIT 的情况下离开查询 如果我将 LIMIT 设置为 37 或以下我会得到一个白屏 我得到的结果 LIMIT 是 38 或以上我会得到一个白屏,但只有当 Name 字段存在于查询中,如果我将 Name 字段排除在查询之外,我可以毫无问题地获取 94 行,这可能是内存问题吗?我的意思是名称字段中的结果并没有那么长,最长的可能是 30 个字符长,我什至在我的代码中放置了一个
ini_set('memory_limit', '2048M');以防万一,但我仍然一无所获 -
var_dump($rows);是做什么的?