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