SELECT を VALUES に指定した INSERT ステートメント:
$stmt = $db->prepare("INSERT INTO weld_reference(weld_id,report_id) VALUES ((SELECT w.id FROM welds w WHERE w.weld_number=?),?)")
以下のコードは、ユーザーが送信した文字列 ($welds) の配列をループし、その ID が tableweld_reference
に存在する場合、その ID を table に挿入しようとしますwelds
。
$stmt->bind_param("si",$weld_number,$_POST['report_id']);
foreach($welds as $weld_number){
if($stmt->execute() and $stmt->num_rows){
++$insert_count;
}
}
行が存在するかどうかを確認するために別のクエリを実行したくありません。各 $stmt->execute() の後に行数または INSERT の成功を取得できることを望んでいました。
ただし、$stmt->affected_rows
は$stmt->insert_id
常に 1 を$stmt->num_rows
返し0
、行が挿入されたかどうかを常に返します。
これを読んで、ユーザーに正確なフィードバック メッセージを送信するために行が挿入されているかどうかを確認するにはどうすればよいですか?
の値はどうやって調べるの$stmt->insert_id
?「以前の INSERT 操作から生成された ID を取得する」が返されるためです。のみ ($evaluate) の場合、true を (1 として) 返します。
私が行う方法は、ID を配列に保存して、挿入されたもののリストを取得できるようにすることです。
$stmt->bind_param("si",$weld_number,$_POST['report_id']);
foreach($welds as $weld_number){
if($stmt->execute()){
$insertedId[]=$stmt->insert_id;
}
}
echo count($insertedId);
または、ID は論理的に空になることはないため、次のことができます
$stmt->bind_param("si",$weld_number,$_POST['report_id']);
foreach($welds as $weld_number){
if($stmt->execute() && !empty($stmt->insert_id)){
$insert_count++;
// ++$insert_count; //unaware of this syntax -.-
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加