紅穆ノート
レコメンド 落とし穴のまとめ カカカ!Bugを修正するのに1日もかからない!<b>Fatal error</b>:Uncaught PDOException:SQLSTATE[HY093]:Invalid parameter number:このパラメータは定義されていません
落とし穴のまとめ

カカカ!Bugを修正するのに1日もかからない!<b>Fatal error</b>:Uncaught PDOException:SQLSTATE[HY093]:Invalid parameter number:このパラメータは定義されていません

カカカ!Bugを修正するのに1日もかからない!<b>Fatal error</b>:Uncaught PDOException:SQLSTATE[HY093]:Invalid parameter number:このパラメータは定義されていません

この場所について$stmt->execute($categoryIds); パラメータ渡しに関する問題。

本当に、呆然としてしまったよ!ただこの一つの問題で、午後ずっと頭が混乱してたんだ!
夜にドキュメントを確認したとき、これが実はこの問題だったことに気づいた。

PDOException: SQLSTATE[HY093] エラー:根本的な原因は&nbsp; SQL文におけるパラメータプレースホルダー、および&nbsp; execute() 受入した配列引数が正しくマッチングされません。

エラー原因の特定

execute() &nbsp;入力を期待していますインデックス配列(例: ) ['value1', 'value2'])または関連配列(例: ) [':name' => 'value'])は、SQLにおける に対応させるために使用されます; ? &nbsp;または&nbsp; :name プレースホルダー

もし&nbsp; $categoryIds 条件を満たさない場合、エラーが発生します。よくある問題例:

  • 配列のキー名が連続していない:もし&nbsp; $categoryIds &nbsp;は&nbsp; array_filter() &nbsp;等の関数で処理された場合、「稀疏配列」が生成される可能性があります(例:キー名が 0、2、3 であるが、1 が欠落している)。execute() この不連続なインデックスを正しく処理できません。

  • キー名が正しくありませんSQLで名前付きプレースホルダー(例: )を使用している場合、 :id), тогда&nbsp; $categoryIds キー名は完全に一致していなければなりません(例: )。 [':id' => 1])。キー名の誤りまたは無効な文字(例:点&nbsp;)の使用; .)いずれも、マッチングに失敗を引き起こします。

  • パラメータ数が一致しない$categoryIds 中にある要素の数は、SQL文内のプレースホルダーの数と完全に一致する必要があります。

  • 多次元配列:もし&nbsp; $categoryIds &nbsp;これは多次元配列(例:データベースから取得した結果セット)です。execute() &nbsp;処理もできません

ソリューション

1. 配列のインデックスを確認し、再設定する(最も一般的な原因)

もしあなたが&nbsp;を使用したことがあるなら; array_filter() &nbsp;または同様の関数の場合、まず&nbsp;を使用してください。 array_values() インデックスをリセット:

// 假设 $categoryIds 来自过滤
// $categoryIds = array_filter($categoryIds);
$categoryIds = array_values($categoryIds); // 重置索引为 0, 1, 2...
$stmt->execute($categoryIds);

2. キーナンバーがプレースホルダーと一致していることを確認してください。

名前付きプレースホルダー(例:&nbsp;)を使用している場合、 :cat_id)ご確認ください:

// 正确的做法
$sql = "SELECT * FROM articles WHERE category_id IN (:cat_id1, :cat_id2)";
$stmt = $pdo->prepare($sql);
// $categoryIds 的键名必须和占位符完全一致
$stmt->execute([':cat_id1' => 1, ':cat_id2' => 2]);

3.を使用&nbsp; ? 占位符(よりシンプル)

もし&nbsp; $categoryIds &nbsp;は単純なインデックス配列(例:&nbsp;)です。 [1, 2, 3]),を使用&nbsp; ? プレースホルダーを使用するとより便利です:

// 生成对应数量的 ? 占位符
$placeholders = rtrim(str_repeat('?,', count($categoryIds)), ',');
$sql = "SELECT * FROM articles WHERE category_id IN ($placeholders)";
$stmt = $pdo->prepare($sql);
$stmt->execute($categoryIds); // 直接传入索引数组

 

微信赞赏

WeChat

支付宝赞赏

Alipay

✍️ クリエイター: 紅穆

ウェブサイト管理者 · ご覧いただきありがとうございます!さらに多くの魅力的なコンテンツをお楽しみいただけますよう、引き続きご支援をお願いいたします。

著者プロフィール プロフィールを見る →

関連記事

ブラウザのキャッシュ利用により、お客様のウェブサイトへの再アクセス速度が向上します。

ブラウザのキャッシュ利用により、お客様のウェブサイトへの再アクセス速度が向上します。 落とし穴のまとめ

ブラウザキャッシュの活用:ユーザーが同サイトを複数回アクセスする場合、静的リソースのブラウザキャッシュを活用することで、ユーザーの時間の節約が可能になります。キャッシュヘッダーは、画像などの一部の静的リソースに限定せず、すべてのキャッシュ可能な静的リソースに適用されるべきです。キャッシュ可能なリソースには、JSファイルやCSSファイル、画像ファイル、その他のバイナリ形式のファイル(メディアファイルやPDFファイルなど)が含まれます。通常、HTML自体は…
👁 207
よく使用される正規表現

よく使用される正規表現 落とし穴のまとめ

正規表現によるURL:[a-zA-z]+://[^\s]*IPアドレス(IP Address)((2[0-4]\d|25[0-5]|[01]?\d\d?)\。){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)電子メール(Email)\w+([-+。]\w+)*@\w+([-。]\w+)*…
👁 249
`file_get_contents` ページで表示内容が乱れている場合の解決方法

`file_get_contents` ページで表示内容が乱れている場合の解決方法 落とし穴のまとめ

私のページでは UTF-8を使用していますが、`file_get_contents`で取得したページデータはGB2312です。この場合、中文字が乱コードとして表示されます。解決方法は以下の通りです:以下のコードをコピーしてください:`<?php header("Content-Type: text/html; charset=utf-8"); $keyworld = "煤层"; …`
👁 204

おすすめ読書

飛行による気の導入

飛行による気の導入 趣味 メモ

1.青龙摆尾:补的手法, 针尾巴,左右摇动,摇9个来回,针对痞块硬块,直达脏腑 2.白虎摇头:泻的手法,退方进圆,肌肉很多的地方,原穴或者本穴 3.苍龟探穴:补的手法,一退三进,进去的时候,分三次,退一次 4.赤凤迎源:泻的手法,退方进圆的同时摇动针柄,也叫赤凤摇头 5.龙虎交战:三部(天人地),每…
👁 232
PHP宝塔警告:scandir():open_basedir制限が有効です。ファイル(/www/wwwrootyiyou/)は許可されたパス(/www/wwwroot/eyoucms.yanshi.4s5.cn/、/tmp/)内にありません。

PHP宝塔警告:scandir():open_basedir制限が有効です。ファイル(/www/wwwrootyiyou/)は許可されたパス(/www/wwwroot/eyoucms.yanshi.4s5.cn/、/tmp/)内にありません。 落とし穴のまとめ

この警告メッセージは、サーバーに `open_basedir` 制限が設定されており、これにより PHP スクリプトのファイルシステムへのアクセス範囲が制限されているため、お客様のスクリプトが許可されていないディレクトリにアクセスしようとした結果、警告が発生したものです。この問題を解決する方法は以下の通りです:サーバー設定の変更 — サーバー管理者に連絡し、サーバーの `open_basedir` 设置を変更して、アクセス対象のディレクトリを許可範囲に追加するよう依頼してください。
👁 363
`curl` と `file_get_contents` を用いたウェブページの取得方法——どちらが適しているでしょうか?

`curl` と `file_get_contents` を用いたウェブページの取得方法——どちらが適しているでしょうか? 言語ノート PHP

`curl` と `file_get_contents` は、Webリソースを取得するために使用される PHP の関数です。両者の用途は同じですが、実装方法や使用法には若干の違いがあります。`curl` は多機能なWebリクエストツールであり、HTTP、HTTPS、FTPなど多様なプロトコルに対応し、より多くのオプションやパラメータを設定できます。`curl` を用いてリクエストを送信することで、より柔軟な処理が可能になります…
👁 239
EmpireCMSのPHPを編集し、記事の公開日(newstime)より前の記事を呼び出す条件を直接設定する。

EmpireCMSのPHPを編集し、記事の公開日(newstime)より前の記事を呼び出す条件を直接設定する。 プログラムノート EmpireCMS

前記事から続きます!「EmpireCMSの動的モード下で、数千万件の記事を自動的に定时発信する方法(手動介入不要)」!この記事では、あなたのウェブサイトに数千万件の記事を保存できるようにし、毎日手動で審査・公開を行う必要がなくなるようになります。ただし、テンプレートの呼び出し記述を「newstime <= ‘.time()’” に変更する必要があります。よく検討した結果、一部のウェブサイトではテンプレート呼び出し回数が多すぎていることがわかりました。そのため、一つひとつ個別に修正する方法も考えられます…
👁 444
EmpireCMSを使用してサイトを複製する際、データのタイトルおよびタイトル用画像を迅速に変更でき、テスト作業を容易にします。

EmpireCMSを使用してサイトを複製する際、データのタイトルおよびタイトル用画像を迅速に変更でき、テスト作業を容易にします。 プログラムノート EmpireCMS

修正後のSQLコード(🔒 裏面表示:コメント後に表示):`UPDATE `phome_ecms_news` SET `title` = CONCAT('これはテスト記事です。記事IDは' || id || 'です。記事を変更する場合は、管理コンソールで編集してください' );` – バッチ処理でスライドショットを一括設定する。スライドショットはPHPを用いて直接設定可能です。PHPコード:指定されたフォルダからランダムにファイルを取得…
👁 646