ネストされた SELECT を使用した INSERT クエリで挿入された行の数を取得するにはどうすればよいですか? 影響を受けた_rows、result_id、num_rowsで運が悪い

ラリー

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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ