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

时间:2017-02-22 18:04:26

标签: php mysql pdo

我是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;
}

0 个答案:

没有答案