PDO SELECT 仅在 foreach 循环中选择第一个

我正在尝试从数据库中选择多个产品并将 id 插入到另一个表中。


我尝试如下执行,如果我只是 echo $name,$_POST["txtMaterial"][$key]并且$_POST["txtSize"][$key]在查询之前,我会获取所有选定的名称、材料和尺寸,但是当我绑定查询中的值时,我只得到第一个。


    foreach($_POST["txtName"] as $key => $name){


      $sQuery = $db->prepare('SELECT id FROM products WHERE name = :sName AND material = :sMaterial AND size = :sSize');

      $sQuery->bindValue(':sName', $name);

      $sQuery->bindValue(':sMaterial', $_POST["txtMaterial"][$key]);

      $sQuery->bindValue(':sSize', $_POST["txtSize"][$key]);

      $sQuery->execute();

      $aOrders = $sQuery->fetchAll();


      foreach($aOrders as $aOrder){

        echo print_r($aOrders);

      }

}

的 print_r$aOrders是这样的:


"Array

(

    [id] => 174

)

1"

这是我需要的第一个 id。谁能帮我看看如何获取所有的 id?


$_POST["txtName"]foreach之前的var_dump :


"array(50) {

  [0]=>

  string(0) ""

  [1]=>

  string(6) "BACURI"

  [2]=>

  string(0) ""

  [3]=>

  string(0) ""

  [4]=>

  string(0) ""

  [5]=>

  string(0) ""

  [6]=>

  string(0) ""

  [7]=>

  string(0) ""

  [8]=>

  string(0) ""

  [9]=>

  string(0) ""

  [10]=>

  string(0) ""

  [11]=>

  string(0) ""

  [12]=>

  string(0) ""

  [13]=>

  string(0) ""

  [14]=>

  string(0) ""

  [15]=>

  string(0) ""

  [16]=>

  string(0) ""

  [17]=>

  string(0) ""

  [18]=>

  string(0) ""

  [19]=>

  string(0) ""

  [20]=>

  string(0) ""

  [21]=>

  string(0) ""

  [22]=>

  string(0) ""

  [23]=>

  string(0) ""

  [24]=>

  string(0) ""

  [25]=>

  string(0) ""

  [26]=>

  string(0) ""

  [27]=>

  string(0) ""

  [28]=>

  string(0) ""

  [29]=>

  string(6) "CAJARI"

  [30]=>

  string(0) ""

  [31]=>

  string(0) ""

  [32]=>

  string(0) ""

  [33]=>

  string(0) ""

  [34]=>

  string(0) ""

  [35]=>

  string(0) ""

  [36]=>

  string(0) ""

  [37]=>

  string(0) ""

  [38]=>

  string(0) ""

  [39]=>

  string(0) ""

  [40]=>

  string(0) ""

  [41]=>

  string(0) ""

  [42]=>

  string(0) ""

  [43]=>

  string(0) ""

  [44]=>

  string(0) ""

  [45]=>

  string(0) ""

  [46]=>

  string(0) ""

  [47]=>

  string(0) ""

  [48]=>

  string(0) ""

  [49]=>

  string(0) ""

}

"

foreach之前的var_dump $_POST["txtMaterial"]:


"array(2) {

  [0]=>

  string(1) "3"

  [1]=>

  string(1) "2"

}


慕婉清6462132
浏览 91回答 1
1回答

蛊毒传说

根据提供的信息,您将获得一条记录ID,因为您准备语句且该语句不为空的唯一时间是循环的第二次迭代。关联数组中只有 2 个键,txtMaterial并且txtSize,接下来的任何键都将返回 null。看看这里:第一个循环 您准备好的语句将如下所示:SELECT id FROM products WHERE name = "" AND material = 3 AND size = 20该语句将返回一个empty数组第二个循环SELECT id FROM products WHERE name = "BACURI" AND material = 2 AND size = 4这最终会得到你得到的结果。具有一条记录的数组ID = 174。任何下一次迭代...SELECT id FROM products WHERE name = "" AND material = NULL AND size = NULL这将返回一个empty数组这是测试:$name = ["", "BACURI", ""];$material = ["3", "2"];$size = ["20", "4"];foreach($name as $key => $val){    echo "\n";    var_dump($val);    var_dump($material[$key]);    var_dump($size[$key]);}输出string(0) ""string(1) "3"string(2) "20"string(6) "BACURI"string(1) "2"string(1) "4"string(0) ""NULLNULL希望能帮助到你。
打开App,查看更多内容
随时随地看视频慕课网APP