【问题标题】:PHP simple foreach loop doesn't workPHP简单的foreach循环不起作用
【发布时间】:2015-10-11 16:35:38
【问题描述】:

我正在尝试做一个简单的foreach 循环,但它只打印出一行,而不是 db 中的两行(我试图将其他行放在 db 中但只有第一行,我找不到错误。

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);

    $sql = "SELECT flyer_url FROM films LIMIT 30";

    $films = $dbh->query($sql);

    $result = $films->fetch(PDO::FETCH_ASSOC);

    foreach($result as $row) {

        print "<img src='" . $row . "' style='width:200px;'>" ;

    }

    $dbh = null;
}
catch (PDOexception $e) {
    echo "Error: " . $e-> etmessage() . '<br/>Contact the System Administrator.';
}

假设 DB conf 数据在 config.php 中并且加载成功。

我正在尝试创建一个个人电影数据库并显示每部电影的剧本。

【问题讨论】:

标签: php mysql pdo foreach


【解决方案1】:

改变

$result = $films->fetch(PDO::FETCH_ASSOC);

$result = $films->fetchAll(PDO::FETCH_ASSOC);

【讨论】:

    【解决方案2】:

    fetch 返回单行,在您的情况下 - 表示为关联数组。为了获取所有行,您必须继续迭代 fetch 的结果:

    while($row = $films->fetch(PDO::FETCH_ASSOC)) {
        print "<img src='" . $row['flyer_url'] . "' style='width:200px;'>" ;
    }
    

    【讨论】:

    • 不是 fetchAll 更快,因为它在每次迭代中都会针对 fetch 进行一次数据库查询?
    • @Melvin fetchAll 是一个糟糕的功能。使用fetch,您可以允许 PDO 控制一次将多少行带到其内部缓冲区。 fetchAll 强制 PDO 一次将所有这些都带入,这可能会导致您的应用程序崩溃,因为它占用了太多内存。
    • @Melvin 还注意到,即使使用fetch,它仍然是一个查询 - 只是有多个提取。网络上的主要压力是传递查询的结果数据。将其分成几个较小的提取应该相对可以忽略不计,除了一些非常特殊的边缘情况。
    【解决方案3】:

    你为什么不这样做-

    $data="";
    foreach($result as $row) { 
    $data .= "<img src='" . $row['flyer_url'] . "' style='width:200px;'>" ; 
    }
    

    这将连接字符串并在 foreach 循环之外为您提供组合结果。

    【讨论】:

    • 不适合pdo数据库交互。仅适用于核心mysql处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多