我正在尝试使用PDO运行FOREACH,但到目前为止,我的代码似乎只为FOREACH迭代一次并且只返回第一个值。
这就是我所拥有的:
$colors = $_GET['color'];
$colors = explode(' ', $colors);
foreach ($colors as $color)
{
$items = $con -> prepare("SELECT * FROM item_descr WHERE color_base1 = :colorbase1");
$items -> bindValue(":colorbase1", $color);
}
$items ->execute();
while($info = $items->fetch(PDO::FETCH_ASSOC))
{
echo $info['color_base1'];
}
请注意,$ colors包含从复选框和jquery获得的多种不同颜色。
谢谢!
答案 0 :(得分:3)
您的代码嵌套错误:您想要准备一次查询,并多次执行它,但您正在做相反的事情。
而不是:
foreach ( ... )
{
prepare( ... );
bind( ... );
}
execute();
你需要:
prepare( ... );
foreach ( ... )
{
bind( ... );
$results[] = execute();
}
或者,您可以使用SQL IN
子句构建一个查询,而不是多次来回数据库的开销。
答案 1 :(得分:1)
这里试试这个:
<?php
//Check your vars before setting!
$colors = (!empty($_GET['color'])?$_GET['color']:null);
$colors = explode(' ', $colors);
//Prepare the query once
$items = $con->prepare("SELECT * FROM item_descr WHERE color_base1 = :colorbase");
//Use bindParam then you can set $color later on
$items->bindParam(":colorbase", $color);
//Execute the query, iterating over each color
$results=array();
foreach ($colors as $color){
$items->execute();
//Fetch the result and store in $results
$results[] = $items->fetchAll(PDO::FETCH_ASSOC);
}
//Loop through results
if(!empty($results)){
foreach($results as $result) {
foreach($result as $row){
echo $row['color_base1'].'<br />';
}
}
}else{
//empty
}
?>
答案 2 :(得分:0)
您是否可以提供print_r
的{{1}}?
原因 - 我认为如果你在q字符串中有空格,那么第一个空格就不会再进一步了,因此foreach只会运行一次。