複数の挿入クエリの実行に失敗しました: 原因と解決策
複数の部分からなる挿入クエリを実行すると、次のエラー メッセージが表示される場合があります失敗:
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
แม้ว่าก่อนเรียกใช้ count($matches) will match count($values)、このエラーが発生する可能性があります。
このエラーの原因は、 $values の要素が $matches の要素の数と一致しません。 $values と $matches に同じ数の要素が含まれていない場合、クエリは X パラメータを期待しますが、Y データ要素 ($matches) しか取得しないため、挿入リクエストは失敗します。この場合、$values にはすでに値が含まれている可能性が高くなります。これが、要素の数が一致しない理由です。
この問題を回避するには、ループの前に必ず配列を初期化する必要があります。
さらに、列 " hash " には一意のインデックスが含まれています。
修正されたコード構造の例を次に示します:
$matches = array('1'); $count = count($matches); $values = []; for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; } // INSERT INTO DATABASE $sql = "INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash=values(hash)"; $stmt = $dbh->prepare($sql); $data = $stmt->execute($matches);
以上がマルチパート INSERT クエリが失敗するのはなぜですか? どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。