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

準備された複数の INSERT クエリで「SQLSTATE[HY093]: 無効なパラメーター番号」が表示されるのはなぜですか?

Patricia Arquette
リリース: 2024-12-09 00:25:10
オリジナル
937 人が閲覧しました

Why Am I Getting

準備された複数挿入クエリの「SQLSTATE[HY093]: 無効なパラメーター番号」の解決エラー

複数挿入クエリを実行しようとすると、 「SQLSTATE[HY093]: 無効なパラメータ番号: パラメータが定義されていません」というエラーが発生する場合があります。パラメータ配列と入力データ要素のカウントが一致しているにもかかわらず、このエラーは継続します。

エラーについて

このエラーは、パラメータの数が一致しないために発生します。パラメーター配列の要素 ($values) と入力データ ($matches)。プリペアド ステートメントを実行する場合、クエリでは特定の数のパラメーターが予期され、矛盾があるとこのエラーが発生します。

問題の解決

この問題を解決するには、パラメータを生成するループに入る前に、$values が初期化されていることを確認してください。これにより、既存の値がカウントに影響を与えることがなくなります。さらに、データベース内の「ハッシュ」列に一意のインデックスが存在することを確認すると、潜在的な競合をさらに防ぐことができます。

改訂されたコード

改訂されたコードは次のとおりです。これらのリビジョンを組み込む:

$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 クエリで「SQLSTATE[HY093]: 無効なパラメーター番号」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート