You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 23:06:24