远程MySQL执行SELECT *查询仅返回最后一条数据,如何解决?
问题原因
你遇到的返回单条数据的问题和远程数据库的拉取上限无关,是代码逻辑错误导致:
mysqli_fetch_assoc()方法每次调用仅从结果集中读取1条记录,指针自动下移到下一条,你仅调用了一次该方法,自然只能拿到单条数据,并非返回的是最后一条,实际是结果集的第一条记录,只是你表内数据存储顺序刚好让你以为是最后一条。
解决方法
你需要循环遍历整个结果集,把所有行存入数组即可拿到全部数据,修改后的代码如下:
$stmt = mysqli_stmt_init($conn); $sql = "SELECT * FROM favorite"; mysqli_stmt_prepare($stmt, $sql); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); // 循环读取所有行 $rows = []; while ($row = mysqli_fetch_assoc($result)) { $rows[] = $row; } var_dump($rows);
额外验证说明
如果需要确认数据库侧返回的总条数,可以在遍历前调用mysqli_num_rows($result)查看结果集总条数,确认是否和表内实际数据量一致:
echo '总记录数:' . mysqli_num_rows($result);
如果确实存在数据库侧限制(极少出现,默认配置不会限制单条SELECT的返回条数,只会限制单包最大传输大小,超过会直接报错而非截断返回),可以在SQL末尾添加LIMIT指定更大的取值范围做测试验证。
内容的提问来源于stack exchange,提问作者sigleane
相关产品推荐
相关产品推荐

