此foreach语句仅向数组添加最后一行

时间:2013-04-17 02:20:56

标签: php arrays foreach

如何更改此foreach语句,以便它将构建一个包含特定列中所有行的数组?它目前只将“first_name”列中的最后一行添加到数组中。

try {  
    $stmt = $conn->prepare("SELECT * FROM student");  
    $stmt->execute();
} catch(PDOException $e) {
    echo $e->getMessage();
} 
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$first_names = array();
foreach ($rows as $row) { 
  $first_names = $row['first_name'];
}

4 个答案:

答案 0 :(得分:1)

你忘了括号。你需要这样做:

$first_names[] = $row['first_name'];

否则,您将$ first_names变量重新创建为单个字符串,并在循环的每次迭代时覆盖它。

答案 1 :(得分:1)

您目前正在覆盖您需要将其填充到数组中的变量:

$first_names[] = $row['first_name'];

答案 2 :(得分:1)

你可以试试这个

array_push($first_names, $row['first_name']);

$first_names[] = $row['first_name'];

代码中的问题是您一次又一次地覆盖自己的变量。

答案 3 :(得分:1)

您必须在变量`

中添加括号
$first_names[] = $row['first_name'];`

我也可以建议这样做一个更清洁的方法吗?

您似乎在查询中使用了try / catch,并且可能在大多数查询中使用它...

你实际上应该使用

$pdo = new PDO("mysql:host=xxxxx;dbname=xxxxxxxx", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // < - - - THIS

所以现在您不需要在代码中添加try / catch。

如果查询失败,如果你不想做其他事情,通常你只需要使用try / catch。

阅读此herehere

享受:)