错误的整数值:第1行的“ po_trans_id”列的“ SELECT LAST_INSERT_ID()[0]”

时间:2019-06-10 21:13:59

标签: php mysql

试图插入多个输入并获取其他表的最后一个ID,然后插入该表以获取外键。

试图从循环中删除并尝试使用foor循环

if($result){

     $j = 0;

    foreach($_POST as $val){
      $po_trans_id        = "SELECT LAST_INSERT_ID()[$j]";
      $po_qty             = $_POST['po_qty'][$j];
      $po_unit            = $_POST['po_unit'][$j];
      $po_description     = $_POST['po_description'][$j];
      $po_unit_price      = $_POST['po_unit_price'][$j];
      $po_total_amount    = $_POST['po_total_amount'][$j];
      $payment_terms      = $_POST['paymentTerms'][$j];
      $user               = $_SESSION["username"][$j];
  $query = "INSERT INTO request_po (po_trans_id,po_qty,po_unit,po_description,po_unit_price,po_total_amount,totalPrice,user) VALUES ('$po_trans_id' , '$po_qty' , '$po_unit' , '$po_description' , '$po_unit_price' , '$po_total_amount' , '$totalPrice' , '$user')";
      $j++;
      $result = mysqli_multi_query($link, $query) or die(mysqli_error($link));
  }

id喜欢将我的最后一个id插入关系数据库的其他表中。

1 个答案:

答案 0 :(得分:1)

LAST INSERT_ID()是有效的SQL。 LAST_INSERT_ID()[0]不是,这是PHP表示法,在SQL中没有位置。

您想要的内容可以通过mysqli的{​​{3}}形式获得。您必须确保在继续操作之前正确完成每个命令,否则可能会在数据库中造成混乱,难以解决。

要解决此问题,请注意以下几点:

  

请勿使用mysqli_multi_query。此命令不支持占位符,并且不能正确保护其安全性。

您想要的是使用准备好的语句将其转换为正确的mysqli

<?php
if ($result) {
  $j = 0;
  $count = count($_POST['po_qty']);

  // Use insert_id property
  $po_trans_id = $link->insert_id;

  $stmt = $link->prepare("INSERT INTO request_po (po_trans_id,po_qty,po_unit,po_description,po_unit_price,po_total_amount,totalPrice,user) VALUES (? , ?, ?, ?, ?, ?, ?, ?)");

  for ($j = 0; $j < $count; $j++) {
    $stmt->bind_param('sssssss',
      $po_trans_id,
      $_POST['po_qty'][$j],
      $_POST['po_unit'][$j],
      $_POST['po_description'][$j],
      $_POST['po_unit_price'][$j],
      $_POST['po_total_amount'][$j],
      $_POST['paymentTerms'][$j],
      $_SESSION["username"][$j]
    );
    $stmt->execute();
  }
}
?>

该语句准备一次并运行多次。如果您insert_id,则也可以避免使用or die(...)反模式。