PHP foreach和之后的while循环

PHP foreach和之后的while循环,php,mysql,foreach,while-loop,Php,Mysql,Foreach,While Loop,我目前有一个查询,它获取数据,然后运行另一个查询。然后我回显第二个查询的结果。我想做的是把回声移到foreach循环之外,但我不知道怎么做 $ids = 2,3; $id = explode(",",$ids); $barcode = array(); foreach($id as $value) { $sql_query = $db->prepare("SELECT barcode FROM product WHERE id=:value"); $sql_query-

我目前有一个查询,它获取数据,然后运行另一个查询。然后我回显第二个查询的结果。我想做的是把回声移到foreach循环之外,但我不知道怎么做

$ids = 2,3;
$id = explode(",",$ids);

$barcode = array();

foreach($id as $value) {
    $sql_query = $db->prepare("SELECT barcode FROM product WHERE id=:value");
    $sql_query->bindParam(":value", $value);
    $sql_query->execute();
    $row = $sql_query->fetch(PDO::FETCH_ASSOC);
    $barcode = $row['barcode'];


    /* I want to move this part starting from here outside the foreach */ 

    $sql_select_all = $db->prepare("SELECT * FROM inventory WHERE barcode=:barcode");
    $sql_select_all->bindParam(":barcode", $barcode);
    $sql_select_all->execute();
    while($row = $sql_select_all->(PDO::FETCH_ASSOC)){

        $name = $row['name'];
        $img = $row['image'];
        $desc = $row['desc'];

        echo $name.$img.$desc;
    }
    /* ending here */

}
如何将回音线移出foreach循环?

试试看

foreach($id as $value){
$sql_query = $db->prepare("SELECT barcode FROM product WHERE id=:value");
$sql_query->bindParam(":value", $value);
$sql_query->execute();
$row = $sql_query->fetch(PDO::FETCH_ASSOC);
// make array with the entry
$barcode[] = '"'.$row['barcode'].'"';    
}
// after foreach we explode the array and add comma , 
$barcode = explode(',',$barcode)

// using mysql ( [IN][1] ) query instead of ( = )
$sql_select_all = $db->prepare("SELECT * FROM inventory WHERE barcode in ($barcode)'");
$sql_select_all->bindParam(":barcode", $barcode);
$sql_select_all->execute();
while($row = $sql_select_all->(PDO::FETCH_ASSOC)){

$name = $row['name'];
$img = $row['image'];
$desc = $row['desc'];

echo $name.$img.$desc;

您需要做的是将第二次查询的结果存储到数组中。然后,您可以将echo移出for循环,并在新阵列上运行循环,如下所示:

$ids = 2,3;
$id = explode(",",$ids);

$barcode = $results = array();

foreach($id as $value){
    $sql_query = $db->prepare("SELECT barcode FROM product WHERE id=:value");
    $sql_query->bindParam(":value", $value);
    $sql_query->execute();
    $row = $sql_query->fetch(PDO::FETCH_ASSOC);
    $barcode = $row['barcode'];


    /*i want to move this part starting from here outside the foreach*/ 

    $sql_select_all = $db->prepare("SELECT * FROM inventory WHERE barcode=:barcode");
    $sql_select_all->bindParam(":barcode", $barcode);
    $sql_select_all->execute();
    while($row = $sql_select_all->(PDO::FETCH_ASSOC)){
        $results[] = $row;
        //$name = $row['name'];
        //$img = $row['image'];
        //$desc = $row['desc'];

        //echo $name.$img.$desc;
    }
    /*ending here*/
    foreach($results as $row) {
        echo $row['name'] . $row['image'] . $row['desc'];
    }

}

剪贴?什么阻止了你?那真是太好了。。有趣的是,它的意思是指出你实际上没有描述你的问题是什么。如果你不告诉我们是什么阻止你搬出去,没有人能帮你。为什么不能简单地将其移动到foreach循环的下方?你试过了吗?如果你这样做会怎么样?好的。。我需要第一次查询中的条形码来运行foreach循环中的第二次查询。。所以,把它移到外面,我只会得到最后一个条形码,而不是两个……是的。。。确切地英语不太好。。这就是为什么我投了两张反对票。。这是我的错好的很好。。但是如果我有一个像这样的
echo
echo$name.$img.$desc那我该怎么办呢?我添加了IN()的引用,你可以在invetory表中使用产品id的联接表或alter表