PDO bindParam() PHP Foreach 循环
PDO bindParam() PHP Foreach Loop
我有一个 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 正确过滤结果。
谢谢。
你应该这样使用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();
请注意,我们在循环中使用了按引用传递,这是必须的。
类似于 Raptor 的响应,您可以像这样简单地将数组放入 execute() 中:
$stmt = $db->prepare($sql);
$stmt->execute(array(':City' => 'string1', ':State' => 'string2'));
虽然声明足够长,但最终可能会变得非常难读。
我有一个 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 正确过滤结果。
谢谢。
你应该这样使用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();
请注意,我们在循环中使用了按引用传递,这是必须的。
类似于 Raptor 的响应,您可以像这样简单地将数组放入 execute() 中:
$stmt = $db->prepare($sql);
$stmt->execute(array(':City' => 'string1', ':State' => 'string2'));
虽然声明足够长,但最终可能会变得非常难读。