ホームページ >バックエンド開発 >PHPチュートリアル >複数の SQL INSERT クエリが「SQLSTATE[HY093]: 無効なパラメータ番号」で失敗するのはなぜですか?

複数の SQL INSERT クエリが「SQLSTATE[HY093]: 無効なパラメータ番号」で失敗するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-06 10:13:12468ブラウズ

Why Does My Multiple SQL INSERT Query Fail with

複数の挿入クエリで予期しないエラーが発生しました

コード スニペットは、テーブルに複数の値を挿入する SQL クエリを準備して実行しようとします。ただし、実行はエラー「SQLSTATE[HY093]: 無効なパラメーター番号: パラメーターが定義されていませんでした。」で失敗します。

エラーの原因

エラーが発生する理由は次のとおりです。 $values 配列の要素の数が $matches 配列の要素の数と一致しません。 SQL クエリでは特定の数のパラメーターが必要ですが、PHP コードでは異なる数値が提供されています。

解決策

エラーを解決するには、$values と $同じ数の要素が含まれる配列に一致します。これは、ループの前に $values 配列を初期化することで実現できます。

さらに、ハッシュ列に一意のインデックスがあるかどうかを確認することをお勧めします。そうでない場合、ON DUPLICATE KEY UPDATE 句が期待どおりに機能しない可能性があります。

改訂されたコード

$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);

以上が複数の SQL INSERT クエリが「SQLSTATE[HY093]: 無効なパラメータ番号」で失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。