1

PDO で FOREACH を実行しようとしていますが、これまでのところ、コードは FOREACH に対して 1 回だけ繰り返され、最初の値のみを返すようです。

ここに私が持っているものがあります:

$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 から取得した複数の異なる色が含まれていることに注意してください。

ありがとう!

4

3 に答える 3

3

コードの入れ子が間違っています。クエリを一度準備して複数回実行したいのですが、逆のことをしています。

それよりも:

foreach ( ... )
{
    prepare( ... );
    bind( ... );
}
execute();

必要なもの:

prepare( ... );
foreach ( ... )
{
    bind( ... );
    $results[] = execute();
}

または、SQLIN句を使用して 1 つのクエリを作成することもできます。データベースを何度も行き来するオーバーヘッドが発生することはありません。

于 2012-08-21T16:03:16.257 に答える
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
}
?>
于 2012-08-21T16:20:05.350 に答える
0

print_rのを提供していただくことは可能でしょう$_GET['color']か?

この理由 - q 文字列にスペースがある場合、最初のスペースがそれ以上進行しないため、foreach は 1 回だけ実行されると思います。

于 2012-08-21T16:03:23.437 に答える