【问题标题】:Invalid argument supplied for foreach in PHP, [duplicate]在 PHP 中为 foreach 提供的参数无效,[重复]
【发布时间】:2018-01-26 22:54:38
【问题描述】:

我在 MySQL 数据库上运行 PDO 查询,我收到一条错误消息,指出为 foreach 提供的参数无效。在前端,我只是将一个字符串传递给 $questionTable,并将一个整数传递给 $questionID。

我做错了什么?

$query = $this->dbConnection->query("SELECT * FROM ('$questionTable') WHERE id = ('$questionID')");
foreach ($query as $row) {
 echo $row;
};

【问题讨论】:

  • $query 的值是多少?使用什么 api - PDO 或 mysqli 或其他?
  • 您需要获取查询的结果集以迭代循环中的行。在您在 SA 上发布问题之前,您应该做一些研究。我猜有很多教程可以向您展示缺少的内容。
  • 使用了 PDO 查询。
  • 什么教程?好像不太好,如果你想阅读官方的 PHP PDO 手册有足够的例子:php.net/manual/en/book.pdo.php
  • 从前端传递这些值并将它们直接注入到查询中是一个非常糟糕的主意。您应该为表名和列名使用白名单,并为值使用准备好的语句。

标签: php pdo invalidargumentexception


【解决方案1】:

是因为我们不应该在查询中输入 '' 吗? 我是说: $query = $this->dbConnection->query("SELECT * FROM ($questionTable) WHERE id = ($questionID)");

【讨论】:

  • 那么提取参数值的方法是用括号括起来吗?这太奇怪了。
  • 括号没用。他们只会膨胀查询。
  • 那我该怎么做呢?
  • @konyv12:我最后一次写这样的东西是没有括号的。比如 SELECT * FROM $tablename WHERE id = $id,但是很抱歉我不确定我用的和你的情况有什么区别。
猜你喜欢
  • 2018-08-02
  • 1970-01-01
  • 2014-01-30
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 2021-02-24
相关资源
最近更新 更多