1

如何更改此 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

4 回答 4

1

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

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

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

于 2013-04-17T02:22:49.017 回答
1

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

$first_names[] = $row['first_name'];
于 2013-04-17T02:23:02.120 回答
1

你可以试试这个

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

或者

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

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

于 2013-04-17T02:24:35.617 回答
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。

在此处此处阅读此内容

享受 :)

于 2013-04-17T02:27:48.093 回答