PHP在线目录页码编号:MySQL查询异常求助
问题分析与解决方案
让我来帮你排查这个问题——你的代码里有两个关键错误导致了第一条记录页码异常:
重复调用
mysql_fetch_array()导致结果集丢失
你在if判断里第一次调用mysql_fetch_array($get_max_page)时,已经把查询结果从结果集中取出,此时结果集指针已经移动到末尾,第二次调用时就无法获取到有效数据,$page_row会变成空值。SQL别名与后续引用不匹配
你最新的SQL查询里把最大值的别名设为get_max_page,但后续代码里却尝试获取$page_row['Page'],这个字段名根本不存在,所以得到的是空值,空值加2就变成了2,这就是第一条记录页码为2的直接原因。
修正后的MySQL扩展代码(注意:MySQL扩展已废弃,仅用于兼容旧项目)
// 执行查询,保持别名和原逻辑一致(用Page作为别名) $get_max_page = mysql_query("SELECT MAX(page_no) AS Page FROM `lots`"); $page_row = mysql_fetch_array($get_max_page); // 判断是否获取到有效数据 if ($page_row && !empty($page_row['Page'])) { $page_no = $page_row['Page'] + 2; } else { $page_no = 12; }
更推荐的方案:使用MySQLi扩展(MySQL扩展已在PHP 5.5+废弃,PHP 7+移除)
为了代码的安全性和长期兼容性,建议升级到MySQLi:
// 假设你已经通过mysqli建立了数据库连接$conn $get_max_page = mysqli_query($conn, "SELECT MAX(page_no) AS Page FROM `lots`"); $page_row = mysqli_fetch_assoc($get_max_page); if ($page_row && !is_null($page_row['Page'])) { $page_no = $page_row['Page'] + 2; } else { $page_no = 12; }
关键修正点说明
- 只调用一次fetch函数,把结果存储到变量中再进行判断和使用,避免指针移动导致的数据丢失
- 确保SQL查询的别名和后续代码中引用的字段名完全一致
- 增加对
page_no是否为null的判断,避免空值运算引发的异常
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

