Php 从PDO函数返回值

Php 从PDO函数返回值,php,pdo,Php,Pdo,我在包含的文件中有此函数 function ListModules() { try { global $DBH; $ListModules->query("SELECT * FROM modules"); $ListModules->execute(); return $ListModules->fetchAll(); } catch (PDOException $e) { file_put_con

我在包含的文件中有此函数

function ListModules() {
try {
        global $DBH;
        $ListModules->query("SELECT * FROM modules");
        $ListModules->execute();
        return $ListModules->fetchAll();
    } catch (PDOException $e) {
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}  }
然后我试着把它们放在一个下拉框中,如下所示:

echo "<select name='deletelist' class='form-control'>
        <option value='0'>Choose a module to delete</option>";
        while($modulelist = ListModules()) {
            echo "<option value='".$moduelist['id']."'>".$modulelist['name']."</option>";
        }
    echo "</select>";
echo”
选择要删除的模块”;
而($modulelist=ListModules()){
echo“$modulelist['name']”;
}
回声“;

我做错了什么?

这是因为函数返回某种数组,所以循环等价于:

while ($modulelist = array(1, 2, 3)) {
这基本上意味着它永远是真的

您可能需要的是一个循环。

ListModules()
return
array

while($modulelist = ListModules()) 
等于

while(true)
必须循环数组,在您的情况下,最好使用

$modulelist=ListModules();
回声“
选择要删除的模块”;
foreach($modulelist作为$module){
回显“$module['name']”;
}
回声“;

我认为这正是我需要的,因为如果我将其放入文件本身而不使用函数,我可以使用$modulelist=$ListModules->fetch,它工作得很好。您应该理解PHP中类型之间的差异
fetch
返回一行,并在PDO语句中前进内部点
fetchAll
返回一个包含所有结果的数组。因此,
fetch
实际上是一个接一个地执行,但是
fetchAll
一次获取所有结果?完全正确。您应该阅读正在使用的函数的手册条目。我也缺少
$DBH->query
。您遇到了什么问题?
$moduelist['id']
缺少一个
l
,这是复制/粘贴打字错误吗?
$modulelist = ListModules();

echo "<select name='deletelist' class='form-control'>
    <option value='0'>Choose a module to delete</option>";

foreach( $modulelist as $module ){
     echo "<option value='".$module ['id']."'>".$module ['name']."</option>";
}

echo "</select>";