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的表名、列名这类标识符要用反引号
`包裹,字符串值用单引号',你写的WHEREblank= 1是正确的,没问题。 - 用完结果集后可以调用
mysqli_free_result($result)释放资源,PHP会自动处理,但养成这个好习惯更稳妥。
内容的提问来源于stack exchange,提问作者Jacob Hilt
相关产品推荐
相关产品推荐

