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

Mysqli Select查询异常:仅返回单条数据问题排查

排查:MySQL查询仅返回单条数据(表中存在多条记录)

嘿,我来帮你分析下这个问题。先理清楚你的代码和输出情况:

你的PHP代码

$sql = "select company_name, salary, experience from company"; 
echo $sql; 
$result = mysqli_query($con,$sql); 
while($row = mysqli_fetch_array($result)) { 
    print_r($row); 
}

实际输出

select company_name, salary, experience from company 
Array ( [0] => xyz [company_name] => xyz [1] => 2 Lac - 3 Lac [salary] => 2 Lac - 3 Lac [2] => 2 Years - 3 Years [experience] => 2 Years - 3 Years )

从你的描述来看,表中明明有多条数据,但代码只输出了一条,我给你列几个最可能的排查方向,按顺序试就行:


1. 先确认数据库里的实际查询结果

别先纠结PHP代码,直接打开你的数据库客户端(比如phpMyAdmin、MySQL命令行、Navicat),手动执行这条SQL:

select company_name, salary, experience from company

如果执行后也只返回一条数据,那问题就出在数据库本身——要么你记错了表的数据,要么表确实只有这一条(比如之前的插入操作没成功)。如果数据库里能返回多条,那再看PHP这边的问题。

2. 检查结果集的实际行数

在PHP代码里加一行,看看查询到底返回了多少行:

$sql = "select company_name, salary, experience from company"; 
echo $sql; 
$result = mysqli_query($con,$sql); 
// 新增这行,查看结果集行数
echo "返回行数:" . mysqli_num_rows($result) . "<br>";
while($row = mysqli_fetch_array($result)) { 
    print_r($row); 
}

如果这里输出的行数是1,那说明MySQL确实只返回了一行;如果行数大于1,那就是输出的问题——比如多个数组挤在一起没分开,看起来像一条。

3. 优化输出,避免混淆

如果结果集行数大于1,但输出看起来只有一条,那是因为print_r的数组没有分隔符,多个数组连在一起你分不清。给循环加个分隔符:

while($row = mysqli_fetch_array($result)) { 
    print_r($row);
    // 加个分隔线,方便区分不同行
    echo "<hr>"; 
    // 如果是命令行环境,用这个:echo PHP_EOL . "---分割线---" . PHP_EOL;
}

这样就能清楚看到是不是有多行输出了。

4. 检查数据库连接是否正确

有没有可能你的$con连接的不是你以为的数据库?比如你本地有多个库,或者测试环境和生产环境搞混了,连接到了一个只有一条数据的company表?可以在代码里加一行输出当前数据库名:

echo "当前数据库:" . mysqli_get_db($con);

确认下是不是连接到了正确的库。

5. 排查结果集指针是否被提前移动

有没有在这段代码之前,对同一个$con执行过其他查询或读取操作?比如之前调用过mysqli_fetch_array或者mysqli_data_seek,导致结果集的指针已经到了最后,后面的循环只能读到一行(甚至读不到)。如果是这种情况,在循环前重置指针就行:

mysqli_data_seek($result, 0);

按这个顺序排查,应该能很快找到问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:24:56