PDO bindParam()PHP Foreach循环

时间:2015-01-16 06:05:41

标签: php mysql loops pdo

我有一个foreach循环,我想执行一个prepare语句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正确过滤结果。

谢谢。

2 个答案:

答案 0 :(得分:10)

你应该像这样使用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();

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

答案 1 :(得分:0)

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

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

这可能会因为一个足够长的陈述而变得非常难以理解。