【问题标题】:I'm getting this error code: Invalid argument supplied for foreach() [duplicate]我收到此错误代码:foreach() 提供的参数无效 [重复]
【发布时间】:2012-10-21 12:17:00
【问题描述】:

我正在学习 PDO,我很困惑,我在下面有这段代码,对我来说一切正常,但是我收到了这个错误代码,我不知道我必须做些什么来修复它,请帮帮我:

<?php
$hostname='localhost';
$username='root';
$password='';

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=stickercollections",$username,$password);
    echo 'Connected to Database<br/>';
    
    $sql = "SELECT * FROM stickercollections";
foreach ($dbh->query($sql) as $row)
    {
    echo $row["collection_brand"] ." - ". $row["collection_year"] ."<br/>";
    }
    
    
    $dbh = null;
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?> 

错误代码

Invalid argument supplied for foreach() in /Applications/XAMPP/xamppfiles/htdocs/GOTSWAPMAIN/index.php on line 11

【问题讨论】:

  • var_dump($dbh-&gt;query($sql)) --- 始终检查变量内部的内容以及返回的表达式而不是猜测
  • 正如 zerkms 所暗示的,查询似乎失败,因此返回 false 而不是可迭代的 PDOStatement。看起来您正在尝试使用带有异常的 PDO。如果连接被配置为使用异常,您将不会收到此无效参数错误,因为会引发异常(因此永远不会执行 foreach)。你必须告诉连接抛出异常,要么查看 PDO::__construct 的第四个参数,要么通过$dbh-&gt;setAttribute

标签: php sql pdo


【解决方案1】:

尝试增加错误模式:

<?php
$hostname='localhost';
$username='root';
$password='';

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

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
    echo 'Connected to Database<br/>';

    $sql = "SELECT * FROM stickercollections";
foreach ($dbh->query($sql) as $row)
    {
    echo $row["collection_brand"] ." - ". $row["collection_year"] ."<br/>";
    }


    $dbh = null;
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?> 

编辑: pdo.error-handling 说,您可以选择使用pdo.errorcodepdostatement.errorcode(或类似)来获取更多信息,但我认为抛出异常是处理不良连接的更好方法,而不是解决主机等。

【讨论】:

  • 谢谢你,已经完成了,我知道它与 setAttribute 相关,但不知道是哪一个以及在哪里,谢谢你的回复。
猜你喜欢
  • 1970-01-01
  • 2017-05-28
  • 2017-09-28
  • 2012-10-22
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多