统计名称含@的数据库表有效行数,现有代码返回值异常
问题原因及修复方案
核心错误:表名的引号使用错误
你的SQL查询中,表名用了单引号'$trenutnatabela',MySQL会把单引号包裹的内容识别为字符串而非表名,导致每次查询都执行失败。但你没有添加错误检查,mysqli_query返回false时,mysqli_num_rows(false)会返回非预期的固定值(也就是你看到的429)。
修复步骤
- 修正表名的引号:MySQL中表名应使用反引号
`包裹(表名含特殊字符或关键字时必须用),也可直接省略引号(表名无特殊字符时)。 - 替换低效统计方式:不要用
SELECT *再统计行数,改用SELECT COUNT(*) FROM 表名,让数据库直接返回行数,避免加载全表数据,提升效率。 - 添加错误检查:执行查询后判断是否成功,避免错误结果影响统计。
修正后的代码
<?php $showtables = mysqli_query($conn, "SHOW TABLES FROM codecleanup LIKE '%@%'"); $total = 0; while ($table = mysqli_fetch_array($showtables)) { $trenutnatabela = $table[0]; // 用反引号包裹表名,并用COUNT(*)统计行数 $upittrentabela = "SELECT COUNT(*) AS row_count FROM `$trenutnatabela`"; $rezultattrentabela = mysqli_query($conn, $upittrentabela); // 检查查询是否成功 if ($rezultattrentabela) { $row = mysqli_fetch_assoc($rezultattrentabela); $rows_count_value = $row['row_count']; $total += $rows_count_value; } else { // 可选:输出错误信息便于调试 echo "统计表 $trenutnatabela 失败: " . mysqli_error($conn) . "<br>"; } } echo "Total number of records is " . $total; ?>
额外说明
COUNT(*)比SELECT *更高效,尤其是数据量大的表,无需传输所有行数据到PHP端。- 始终检查数据库查询的返回结果,能快速定位SQL语法或权限类问题。
内容的提问来源于stack exchange,提问作者sestra tereza
相关产品推荐
相关产品推荐

