为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕婉清6462132 2023-06-24 15:39:26
我正在尝试从数据库中选择多个产品并将 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"}
查看完整描述

1 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

根据提供的信息,您将获得一条记录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) ""

NULL

NULL

希望能帮助到你。


查看完整回答
反对 回复 2023-06-24
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信