使用 PHP PDO 动态查询 Mysql 并在 Select 中使用 %

Posted

技术标签:

【中文标题】使用 PHP PDO 动态查询 Mysql 并在 Select 中使用 %【英文标题】:Dynamically Query Mysql using PHP PDO and using % in Select 【发布时间】:2018-11-30 23:28:58 【问题描述】:

我已查询数据库并获得了符合我的条件的数据库名称列表。这是我跑来获取信息的。

$sql = "SELECT DISTINCT tb.TABLE_SCHEMA
                FROM 
                    INFORMATION_SCHEMA.TABLES AS tb
                        INNER JOIN
                    INFORMATION_SCHEMA.TABLES AS tb2
                WHERE tb.TABLE_NAME like '%OPTION%'
                AND tb2.TABLE_NAME like '%USER%'"; 
    $query = $handler->prepare($sql); 
    $query->execute(); 
    $dbnames = $query->fetchAll(PDO::FETCH_COLUMN);

我想要完成的工作: 现在我有了名称,我需要遍历每个数据库,以便获得网站列表、管理员电子邮件和用户登录名。我知道我可以单独实现这一点,但我试图用变量动态地做到这一点。下面的 select 语句将运行并给出我的答案。但是,FROM ysY6q8hmL7_options 中下划线前的前缀在每个数据库中都不同。

SELECT option_value  FROM `ysY6q8hmL7_options` WHERE `option_name` = 'home' 

我尝试了这段代码,但一直出错。我怎么解决这个问题。如何在不知道每个表的全名的情况下动态运行查询。谢谢你。

foreach ($result as $val)    
    $sql = "SELECT option_value FROM $val.%_options WHERE option_name = 'home'"; 
    $query = $handler->prepare($sql); 
    $query->execute(); 
    $dbnames = $query->fetchAll(PDO::FETCH_ASSOC);
    printResultConsole($dbnames); 

【问题讨论】:

$val_options 而不是 $val.%_options? 【参考方案1】:

你的逻辑看起来不错,但为什么你的表名中有那个百分号?这可能是导致错误的原因(顺便说一下,您应该分享的消息)。

试试这个:

    $sql = "SELECT option_value FROM " . $val . "_options WHERE option_name = 'home'"; 

【讨论】:

以上是关于使用 PHP PDO 动态查询 Mysql 并在 Select 中使用 %的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eclipse PHP 上使用 PDO MySQL 并在 PHP CLI 应用程序中运行?

PDO / PHP / MySQL 中的性能:事务与直接执行

如何在 PHP PDO 中使用异步 Mysql 查询

使用 PHP PDO 准备语句和 MySQL 选择字段为空的行

如何在 PHP 中为动态查询构建参数化 PDO 语句?

PHP/PDO/MySQL:将多个查询转换为单个查询