试图插入多个输入并获取其他表的最后一个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插入关系数据库的其他表中。
答案 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(...)
反模式。