php foreach添加到数组,关于php:此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'];

}

更新了我的答案以进一步澄清

@RixhersAjazi-我想带您接受您的报价,并向您提出一个快速问题:-)虽然找不到您的电子邮件地址,但我想知道您是否可以聊几分钟

今晚生病。

目前上课

哦,电子邮件在我的个人资料上:D

您必须在变量中添加方括号

$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即可。

在这里和这里阅读

请享用 :)

感谢您的建议:-)我对您对try / catch的评论感到好奇-我实际上在config文件中构造了这样的连接(这就是为什么Im使用$ conn->的原因),但是我被告知我也应该将每个包围起来使用try / catch的db查询。那是不必要的吗?

就像我在这里的帖子以及我链接的帖子中所述,要在try / catch中加入它们的唯一原因是,如果您想在查询上出错,是否还想做其他事情。例如,如果您要将它们记录在特殊的日志文件中,或者您拥有什么。查询将失败或不失败...因此,例外模式将得到处理。

只是将其放在上下文中,如果说您想进行一次尝试/捕获,而如果失败,则希望向您发送一封电子邮件,那么是的,尝试/捕获对此非常有用...但是如果您只是想检查查询是否可用,然后让默认错误处理为您解决问题。

我不确定我是否会100%关注您,但是我相信您确认了我最初的想法(在SO上多次大喊大叫之前;-))-由于配置文件中存在try / catch语句,因此它会自动被调用每次我调用该函数时。我对此是否正确?

我可以查看您的配置文件-任何重要信息。我不确定是否会是100%的情况。

基于此阅读php.net/manual/en/class.pdoexception.php如果您在配置文件中进行try / catch,只会导致连接本身失败的异常...

确定:-D try {$ conn = new PDO(mysql:host = xxxxx; dbname = xxxxxxxx,用户名,密码); $ conn-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION); } catch(PDOException $ e){回显错误:。 $ e-> getMessage(); }

好的,是的,仅当连接失败时才会出现异常,这是基于我在您的连接信息上方发布的链接所导致的。

我现在有点迷失了;-)我应该做些不同的事情吗?

不好意思,我最初的评论是,如果您不留下定制的消息,向自己发送电子邮件等,那么您无需对所有查询进行尝试/捕获。如果在查询失败时需要自定义操作,则应实施"尝试/捕获"。您的配置很好!只是想帮助您编写更少的代码而已:)很抱歉让您感到困惑:*(

我只是不了解它们如何联系在一起;-)我只想找到快捷方式:-D而且由于我现在还没有创建自定义消息,这听起来像是我刚刚找到了一个:-)

棒极了!就像有一点额外的上下文一样,我只使用了一次Try / Catch(到目前为止,在我一直没有做之前),并且如果查询失败,则在电子邮件中有一个实例...所以是的,我很高兴现在可以清除它。您的第一个问题是否也解决了数组问题?

现在唯一的问题是如何在将来发布我的代码,以免每次都被淹没? (每次我都没有去麻烦它,我就获得至少2次有关try / catch,错误消息等需求的讲座。:-()

(叹气)不同的人有不同的方式。 我最近在我的代码中删除了模型中的所有try / catch。 如果有的话,您可以只链接到我链接过的两篇文章,也可以链接到此文章以供将来参考。 oooorrrr .......只需添加代码的"代码段",而不实际向他们显示您未使用try / catch:P

那实际上是我在做什么(仅包含摘要),这就是为什么它如此令人沮丧的原因。 也许我会很幸运,现在我有更多要说的地方,人们会放心我;-)我喜欢SO社区,但有时这可能有点困难或令人生畏

是的,我也很喜欢当我们随机得到-1时,没有人说什么...(脸部手掌)。 我没有要点:(

当我回答自己的问题并得到-1 :-D时,让我感到不安的是什至有可能吗?

你可以试试这个

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

要么

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

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

做到了:-D出于好奇,您介意解释第一种方法吗?我想知道是否可以通过允许我定义数组并在同一条语句中使用它来省掉一个步骤?

这在手册php.net/manual/en/function.array-push.php中。您仍然需要一个数组,因为您必须从每一行提取列的值。

谢谢:-)我仍然在真正地学习数组:-)一种方法比另一种方法有好处,还是仅仅是个人喜好?

第二种方法对单个元素更好,因为我们避免了方法调用的开销。但我认为这没有太大的区别。我更喜欢第一种方式,因为我认为它使阅读更容易,但它只是个人喜好。

那真的很有帮助:-D

别客气。请标记最合适的答案!

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

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

您忘记了括号。您需要这样做:

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

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

我真的希望SO让我选择接受多个答案。您肯定给了我最清楚的解释是什么原因造成的,当我不得不在最佳答案和我从中学到的最多的答案之间做出选择时,我总是感到困惑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值