【问题标题】:PHP: PDO foreach don't workPHP:PDO foreach 不起作用
【发布时间】:2016-05-23 15:51:11
【问题描述】:

我将做一个 foreach 循环来使用这个来打印数组值:

$query = $db->prepare("SELECT * FROM products WHERE category = 1");
$query->execute();

foreach($query as $row) {
var_dump($row);
}

但foreach循环似乎没有执行,我的err.log中没有任何内容

有人可以帮忙吗?

【问题讨论】:

标签: php mysql pdo foreach


【解决方案1】:

两种选择:

$query = $db->prepare("SELECT * FROM products WHERE category = 1");
$query->execute();

while($row = $query->fetch()){
    var_dump($row);
}

Fetch() 一次返回一行,因此您必须执行一个 while 循环来获取所有结果。

或者

$query = $db->prepare("SELECT * FROM products WHERE category = 1");
$query->execute();
$results = $query->fetchAll();    

foreach($results as $row){
    var_dump($row);
}

在上面的示例中,您使用 fetchAll() 一次获取所有行。然后在这些行上使用 foreach 循环。

首先,您必须使用 query() 函数准备一个查询。然后您必须使用 execute() 执行它,但您还必须检索结果,这不是自动完成的。为此,请使用 fetch() 或 fetchAll()

看看以下链接:

http://php.net/manual/en/pdostatement.fetch.php http://php.net/manual/en/pdostatement.fetchall.php

【讨论】:

  • +1 表示光标版本(方法 1)。如果你有 10000000 个结果,你可能不想 fetchAll..
  • True 取决于用例,光标版本可能是更好的选择。
  • @DanFromGermany,很棒的提示。不知道它对这种情况也有用。
【解决方案2】:

这就是 PDO 的方法:

$stmt = $db->prepare("SELECT * FROM products WHERE category = 1");
$stmt->execute();
$products = $stmt->fetchAll();

foreach($products as $product) {
var_dump($product);
}

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多