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