【问题标题】:PDO bindParam() PHP Foreach LoopPDO bindParam() PHP Foreach 循环
【发布时间】:2015-03-14 17:11:40
【问题描述】:

我有一个 foreach 循环,我想执行一个准备语句 pdo。我已经阅读了一些关于参考的帖子,但我不知道如何使用我的代码:

$str = ":City, Aurora; :State, CO";
$wherestr = explode(";",$str);

$sql = "SELECT * FROM Organization WHERE City = :City AND State= :State";
$stmt = $db->prepare($sql);

foreach ($wherestr as $ws) {
 $ws = explode(",",$ws);
 $ws0 = trim($ws[0]);
 $ws1 = trim($ws[1]);
 $stmt->bindParam($ws0,$ws1);
}
$stmt->execute();

我在这里阅读过Binding params for PDO statement inside a loop,您可以通过使用 & 符号创建引用来完成这项工作,但我没有像他们那样使用 Key=>Value。谁能帮我让这个循环通过参数并执行?

如果我只有一个 WHERE (:var),那么它工作正常,但如果我有多个 WHERE 过滤器,它似乎会覆盖前一个过滤器,而不是执行执行语句中的所有 bindParams。我没有收到任何错误,只是没有使用多个 var 正确过滤结果。

谢谢。

【问题讨论】:

  • 您错误地使用了foreach。您覆盖每个循环中的参数。
  • 我知道很多,这就是我写这篇文章的原因。我需要知道如何解决它!
  • 我们需要知道您的 SQL 语句如何才能提供帮助。
  • @Raptor 我添加了我的代码/sql

标签: php mysql loops pdo


【解决方案1】:

你应该像这样使用bindParam

$sql = 'SELECT * FROM Organization WHERE City = :City AND State= :State';
$wherestr = array('string1', 'string2');
$stmt = $db->prepare($sql);
$stmt->bindParam(':City', $wherestr[0]);
$stmt->bindParam(':State', $wherestr[1]);
$stmt->execute();

如果你坚持使用foreach,这里有一个方法:

$stmt = $db->prepare($sql);
$params = array(':City' => 'string1', ':State' => 'string2');
foreach ($params as $key => &$val) {
    $stmt->bindParam($key, $val);
}
$stmt->execute();

注意,我们在循环中使用按引用传递,这是必须的。

【讨论】:

    【解决方案2】:

    与 Raptor 的响应类似,您可以简单地将数组放入 execute() 中,如下所示:

    $stmt =  $db->prepare($sql);
    $stmt->execute(array(':City' => 'string1', ':State' => 'string2'));
    

    但如果声明足够长,这最终可能会变得非常难以阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-13
      • 2015-10-29
      • 2013-03-05
      • 1970-01-01
      • 2023-03-11
      • 2016-09-02
      相关资源
      最近更新 更多