我有一个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.谁能帮助我让这个循环通过Param并执行?
如果我只有一个WHERE(:var),那么它工作正常,但如果我有多个WHERE过滤器,它似乎覆盖前一个过滤器而不是执行execute语句中的所有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();
请注意,我们在循环中使用pass by reference,这是必须的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。