0

<select>我正在尝试创建一个用户名下拉菜单或HTML. 但是我只从我的数组中取回最后一个值,我不知道为什么。

PHP

function getUserName($db) {

    try {
        $sql = 'SELECT members.name FROM members';
        $query_an = $db->query($sql);               
        $count = $query_an->rowCount();

        if ($count > 0) {
            while ($row = $query_an->fetch(PDO::FETCH_ASSOC)) {
                $names = array();   
                $names[] = $row['name'];                                
            }
            return $names;          
        }       
    } catch(PDOException $e) {
        die($e->getMessage());
    }
}

HTML

<select>                        
  <?php $names = getUserName($db); foreach($names as $key => $value) { ?>
    <option value="<?php echo $key ?>"><?php echo $value ?></option>
  <?php }?>
</select>

我相当确定HTML我的代码部分是可靠的。我认为错误在于我如何将值添加到我的 $names 数组中,但是在盯着它看了半小时后我看不到它。感谢您的帮助/新鲜的眼睛。

4

4 回答 4

3

您需要在循环外声明您的数组

if ($count > 0) {
    $names = array(); 
    while ($row = $query_an->fetch(PDO::FETCH_ASSOC)) {
        $names[] = $row['name'];                                
    }
    return $names;          
}      
于 2013-07-21T20:19:04.820 回答
2

这每次都会清空您的数组:$names = array();

用这个 :

while ($row = $query_an->fetch(PDO::FETCH_ASSOC)) {
    $names[] = $row['name'];                                
}
于 2013-07-21T20:19:33.303 回答
2

您正在$names每行创建一个新数组,然后返回最后一个。您需要在 while 循环之外声明数组。以下应该有效:

function getUserName($db) {

try {
    $sql = 'SELECT members.name FROM members';
    $query_an = $db->query($sql);               
    $count = $query_an->rowCount();

    if ($count > 0) {
        $names = array();
        while ($row = $query_an->fetch(PDO::FETCH_ASSOC)) {
            $names[] = $row['name'];                                
        }
        return $names;          
    }       
} catch(PDOException $e) {
    die($e->getMessage());
}
}
于 2013-07-21T20:19:35.380 回答
2

问题是您要在每个循环上重新初始化数组:

看:

while ($row = $query_an->fetch(PDO::FETCH_ASSOC)) {
                $names = array();   
                $names[] = $row['name'];                                
            }
            return $names; 

应该:

$names = array(); 
 while ($row = $query_an->fetch(PDO::FETCH_ASSOC)) {                      
                $names[] = $row['name'];                                
            }
            return $names;     
于 2013-07-21T20:20:03.593 回答