PHP数据库查询仅执行最新行问题:如何遍历所有符合条件的行?
解决PHP数据库查询仅处理最新行的问题
你的问题
你现在遇到的困扰是:你的PHP代码查询数据库中符合条件的域名数据,但始终只处理最后一行(最新行),哪怕尝试加了循环也没用,希望能遍历所有符合条件的行。
问题根源
看你的代码,核心问题出在变量赋值的逻辑上:
$domainnames = "domainurl"; $domaindate = "expirationdate"; while ($row = mysqli_fetch_array($query)) { $domainnames = $row['domainurl']; // list of expiring URLs $domaindate = $row['expirationdate']; // list of expiry dates }
你每次循环都把$domainnames和$domaindate这两个变量直接覆盖成当前行的值,而不是把每一行的数据保存起来。循环结束后,这两个变量自然就只剩下最后一行的数据,根本没留存之前的行内容。
修正方案
你需要用数组来存储每一行的数据,循环时把每一行的内容追加到数组末尾,而不是覆盖变量。修改后的完整代码如下:
<?php $db = mysqli_connect("" , "", "") or die("Check connection parameters!"); mysqli_select_db($db,"ds_main") or die(mysqli_error($db)); if (mysqli_connect_error()) { die ('Failed to connect to MySQL'); } $sqlCommand = "SELECT companyname, domainurl, expirationdate FROM domains WHERE expirationdate BETWEEN CURDATE() AND CURDATE()+INTERVAL 30 DAY"; $query = mysqli_query($db, $sqlCommand) or die (mysqli_error($db)); // 初始化两个空数组,用来存储所有符合条件的行数据 $domainnames = []; $domaindates = []; while ($row = mysqli_fetch_array($query)) { // 把当前行的数据追加到数组末尾 $domainnames[] = $row['domainurl']; $domaindates[] = $row['expirationdate']; } // 遍历数组处理每一条数据 if (!empty($domainnames)) { foreach ($domainnames as $index => $url) { $expiryDate = $domaindates[$index]; // 在这里执行你的业务任务,比如打印或发送提醒 echo "域名:{$url},到期日期:{$expiryDate}<br>"; } } // 释放结果集并关闭数据库连接 mysqli_free_result($query); mysqli_close($db); ?>
额外优化建议
- 你也可以直接在
while循环内处理每一行数据,不用先把所有数据存到数组里,这样更节省内存:
while ($row = mysqli_fetch_array($query)) { $url = $row['domainurl']; $expiryDate = $row['expirationdate']; // 直接在这里执行任务 echo "域名:{$url},到期日期:{$expiryDate}<br>"; }
- 建议使用
mysqli_fetch_assoc()代替mysqli_fetch_array(),这样只会返回关联数组(即$row['key']形式),避免拿到不必要的索引数组,代码更简洁。
内容的提问来源于stack exchange,提问作者Mindin
相关产品推荐
相关产品推荐

