You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询异常:执行SELECT语句仅返回一行数据求助

嘿,我瞅见你遇到了mysqli查询只返回一行的问题,这其实是个新手常踩的小坑,我来给你掰扯清楚!

问题根源

你现在用的mysqli_fetch_array($result)每次调用只会从结果集中取出一行数据——哪怕你的SQL查询返回了N行,只调用一次的话就只能拿到第一行。不管是最初的SELECT *还是后来带WHERE条件的查询,这个逻辑都是一样的。

解决方法

有两种常用方式可以获取所有符合条件的数据:

方法1:用while循环遍历结果集

这是最经典的用法,循环调用mysqli_fetch_array直到结果集为空,把每一行都存起来:

<?php 
$link = mysqli_connect("host", "database", "password", "database"); 
if (mysqli_connect_error()) { 
    die("There was an error, Please try again"); 
} 
// 替换成你需要的查询语句
$query = "SELECT `列名` FROM `news` WHERE `blank` = 1"; 
$result = mysqli_query($link, $query);

// 初始化数组存所有数据
$allNewsData = [];
// 循环取出每一行
while ($row = mysqli_fetch_array($result)) {
    $allNewsData[] = $row;
}

// 查看所有结果
print_r($allNewsData);
?>

方法2:用mysqli_fetch_all一次性获取所有行

如果你的PHP版本在5.3及以上,可以直接用这个函数一次性把结果集全部取出来,写法更简洁:

<?php 
$link = mysqli_connect("host", "database", "password", "database"); 
if (mysqli_connect_error()) { 
    die("There was an error, Please try again"); 
} 
$query = "SELECT `列名` FROM `news` WHERE `blank` = 1"; 
$result = mysqli_query($link, $query);

// 一次性获取所有行,MYSQLI_ASSOC表示返回以列名为键的关联数组
$allNewsData = mysqli_fetch_all($result, MYSQLI_ASSOC);

print_r($allNewsData);
?>
额外小提醒
  • 注意SQL里的符号:MySQL的表名、列名这类标识符要用反引号`包裹,字符串值用单引号',你写的WHERE blank = 1是正确的,没问题。
  • 用完结果集后可以调用mysqli_free_result($result)释放资源,PHP会自动处理,但养成这个好习惯更稳妥。

内容的提问来源于stack exchange,提问作者Jacob Hilt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:59:04