【问题标题】:Loop results PDO PHP循环结果 PDO PHP
【发布时间】:2012-10-09 20:42:20
【问题描述】:

我正在尝试从我网站上的表中获取所有记录,我有以下内容

$sth = $conn->prepare("SELECT * FROM directory WHERE user_active != ''");
$sth->execute();

/* Exercise PDOStatement::fetch styles */
$result = $sth->fetch(PDO::FETCH_ASSOC);
foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $result) {
    echo $result[First_Name];
}

只有它没有返回所有记录,只有我的第一个,有人能看到我哪里出错了吗?

【问题讨论】:

  • 检查名字和姓氏的大小写也可能会出现问题
  • 只需使用fetchAll 而不是fetch

标签: php mysql pdo


【解决方案1】:

你需要使用循环:

while ($result = $sth->fetch(PDO::FETCH_ASSOC)) {
    echo $result[First_Name];
    echo ' ' . $result[Surname];
}

或者你可以使用fetchAll 方法:

foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $result) {
    echo $result[First_Name];
    echo ' ' . $result[Surname];
}

注意:如果First_NameSurname 不是常量,那么您应该使用字符串作为键名。

$result['First_Name']$result['Surname']

【讨论】:

  • 由于某种原因,这只从我的表中返回 1 条记录 @xdazz
  • 你可能只有 1 条记录?
  • 或者您使用的第一段代码只有 fetch(PDO::FETCH_ASSOC) 而不是 fetchAll(PDO::FETCH_ASSOC)。
【解决方案2】:

好吧,你只给$sth->fetch打一次电话。您需要遍历结果。

while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
   echo $row['First_Name'] . ' ' . $row['Surname'] . "\n";
}

也不要调用没有大括号的数组字符串索引。这样,PHP 会检查键是否为 CONSTANT,然后将其转换为字符串。这只是一种不好的做法,可能会导致意外的行为。

如果这仅返回一行,则您的数据库(或结果集中)可能只有一行。向我们展示更多代码!

【讨论】:

  • 这也只返回 1 个记录 @vaseliq?
猜你喜欢
  • 2015-05-09
  • 2015-07-23
  • 1970-01-01
  • 2019-03-11
  • 2013-04-22
  • 2014-09-07
  • 1970-01-01
  • 2015-03-14
  • 2015-10-29
相关资源
最近更新 更多