Php 使用PDO将MySQL数据库中的所有表加载到关联数组中

Php 使用PDO将MySQL数据库中的所有表加载到关联数组中,php,mysql,pdo,Php,Mysql,Pdo,我是PDO的新手。我需要将MySQL数据库中的所有表传递到一个关联的PHP数组中(每个表都有自己的数组,聚集到一个伞形数组中,表名作为键) 我能够很容易地获取表名,但是我的第二个查询(依次获取每个表)没有返回任何内容,没有apache2错误。我最终了解到,在使用多个PDO对象时,显然有一个故意的限制,但我仍然无法摆脱它。我将用两次尝试来说明,一次是使用明显非法的双对象,第二次是在一个对象中使用两条语句,使用一个参数作为表名的推测性尝试。将调用分离为两个单独的函数也没有区别。我还没有到用try/c

我是PDO的新手。我需要将MySQL数据库中的所有表传递到一个关联的PHP数组中(每个表都有自己的数组,聚集到一个伞形数组中,表名作为键)

我能够很容易地获取表名,但是我的第二个查询(依次获取每个表)没有返回任何内容,没有apache2错误。我最终了解到,在使用多个PDO对象时,显然有一个故意的限制,但我仍然无法摆脱它。我将用两次尝试来说明,一次是使用明显非法的双对象,第二次是在一个对象中使用两条语句,使用一个参数作为表名的推测性尝试。将调用分离为两个单独的函数也没有区别。我还没有到用try/catch环境清理代码的地步

// Attempt #1: Two separate objects

function getMotifs()
{
    global $themesdb;
    $motifNames = array();
    $showTables = $themesdb->prepare("SHOW TABLES");
    $showTables->execute();
    while ($column = $showTables->fetch(PDO::FETCH_NUM))
    {
        array_push($motifNames, $column[0]);
    }
    $motifIndex = array();
    foreach ($motifNames as $table)
    {
        $getMotifs = $themesdb->prepare("SELECT * FROM $table");
        $getMotifs->execute();
        while ($item = $getMotifs->fetch(PDO::FETCH_ASSOC))
        {
            $motifIndex[$table] = $item;
        }
    }
    return $motifIndex;
}

    // Attempt #2: One object, two statements, one parameter

function getMotifs()
{
    global $themesdb;
    $motifNames = array();
    $table = "?";
    $showTables = $themesdb->prepare("SHOW TABLES; SELECT * FROM :table");
    $showTables->bindParam(':table', $table, PDO::PARAM_STR);
    $showTables->execute();
    while ($column = $showTables->fetch(PDO::FETCH_NUM))
    {
        array_push($motifNames, $column[0]);
    }
    $motifIndex = array();
    foreach ($motifNames as $table)
    {
        $showTables->execute();
        while ($item = $showTables->fetch(PDO::FETCH_ASSOC))
        {
            $motifIndex[$table] = $item;
        }
    }
    return $motifIndex;
}

所有表???在这两个示例中,您都不用检查prepare或execute语句的结果。可能需要从那里开始。尝试2是无效的PDO,因为您无法参数化表名或列名。尝试1对我有效,因此您可能只是将内存分配分解,一次将所有内容加载到单个数组中。是否检查了错误日志