如何在PHP中循环遍历MySQL指定表并执行条件查询?
解决MySQL多表循环查询问题
问题分析
你已经通过SHOW TABLES LIKE '%games'拿到了目标表数组,但数组结构是嵌套的,每个元素包含固定键名的子数组,同时构造SQL时存在语法错误(用单引号包裹表名、变量引用错误),导致无法正确执行查询。
修正步骤
1. 正确提取表名
从返回的数组中提取表名,每个子数组的键为Tables_in_h2b (%games)(该键由数据库名+匹配条件生成,这里h2b是你的数据库名),需通过此键获取表名。
2. 构造合法SQL语句
- 表名不能用单引号包裹,建议用**反引号(`)**包裹,避免表名含特殊字符时出现语法错误
- 因表名来自
SHOW TABLES的可信结果,可直接拼接SQL;若存在外部输入风险,需额外做安全校验
3. 优化数据遍历逻辑
遍历查询结果时,直接使用foreach的$value变量,无需通过$key二次取值,简化代码。
完整修正代码
function landing() { $db_handle = new DBController; $games_table_array = $db_handle->runQuery("SHOW TABLES LIKE '%games'"); // 遍历每个游戏表 foreach ($games_table_array as $table_item) { // 提取当前表名 $table_name = $table_item["Tables_in_h2b (%games)"]; // 构造查询SQL,用反引号包裹表名 $sql = "SELECT * FROM `$table_name` WHERE command > 20 ORDER BY command DESC LIMIT 10"; $games_array = $db_handle->runQuery($sql); // 遍历当前表的查询结果 foreach ($games_array as $game) { // 根据表名自动匹配图片目录(比如apk_games对应games_apk) $img_dir = str_replace('_games', '', $table_name); ?> <div class="container"> <img src="assets/images/games_<?php echo $img_dir; ?>/<?php echo $game["img"]?>" alt=""> <span><?php echo $game["command"]?> achats</span> </div> <?php } } }
关键说明
- 表名提取注意:如果你的数据库名不是
h2b,需要将Tables_in_h2b (%games)替换为对应格式的键名(格式为Tables_in_你的数据库名 (%games)) - SQL语法规范:单引号用于包裹字符串值,表名、列名需用反引号或直接使用(无特殊字符时),否则MySQL会将其识别为字符串而非数据库对象
- 路径优化:通过
str_replace自动生成图片目录名,避免为不同表硬编码路径,提升代码可维护性
内容的提问来源于stack exchange,提问作者Mario Shaya
相关产品推荐
相关产品推荐

