• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpのプリペアドステートメントのエラーについて)

PHPのプリペアドステートメントでのエラーについて

このQ&Aのポイント
  • PHPの開発で、プリペアドステートメントを使用してDBからデータを取得する際に「PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in 」というエラーが出力されます。
  • エラーが発生しているのは、送信側のソースにおけるbindValueの定義が誤っている可能性があります。
  • 解決策としては、bindValueで指定するパラメータの名前(:rdate_yearなど)を、AAA.php内のbindValueの引数と一致させる必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>誤ってないと思うのですが。。。 そう思って見直すと見落とします(汗 >$sqla = "SELECT * FROM AAAAAA WHERE rdateyear = :rdata_year >AND rdatemonth = :rdate_month AND rdateday = :rdate_day"; rdateyearのプレースホルダが、::rdata_yearになっています(bindValueでは':rdate_year')。

chinkanano
質問者

お礼

shimixさん ご回答ありがとうございます。 誤りを修正し、無事にphpが実行できました。 (rdataに気づかず、恥ずかしい限りです) ありがとうございましたm(_ _)m

その他の回答 (3)

noname#244856
noname#244856
回答No.4

shimixさんの回答で事足りてると思いますが、スルーされた部分を補足的に回答(汗 ArwinさんはbindValueのマニュアルをまず… http://php.net/manual/ja/pdostatement.bindvalue.php bindValue・bindParamともにコロンは必要で、エスケープは自動的にこのメソッドによって行われるため不要。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

一点だけ・・・ ANo.2で >コロンは、SQL文側での変数宣言する意味合いでしょうから、 >bindvalueの引数にはいらないと思いますよ。 という回答がありますが【必要です】。コロンもプレースホルダ名の一部ですので。 #それ以外の部分は華麗にスルーで(ぉぃ

chinkanano
質問者

お礼

shimixさん ANo.1に続き、ありがとうございました。

  • Arwin
  • ベストアンサー率14% (1/7)
回答No.2

phpはよく知りませんが、まあ、エラーメッセージに書いてありますよね。 そんなパラメータ名知らねえぞって。 bindvalue(':param_name', values); コロンは、SQL文側での変数宣言する意味合いでしょうから、bindvalueの引数にはいらないと思いますよ。 あと、ちなみにですが、Formからポストされた値そのままぶち込むのはどうかと思いますし、dbとのコネクションもロジックの中に直書きして大丈夫ですか? 自分の趣味で作ってるものであればいいですが、私がマネージャーだと怒りますよ。 派遣だったりクビにします。

chinkanano
質問者

お礼

Arwinさん ご回答ありがとうございます。 また、ご指摘ありがとうございます。 最近、プログラミングを始めたばかりでして、恥ずかしい限りでございます。 ありがとうございました。

関連するQ&A