- ベストアンサー
PHPのプリペアドステートメントでのエラーについて
- PHPの開発で、プリペアドステートメントを使用してDBからデータを取得する際に「PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in 」というエラーが出力されます。
- エラーが発生しているのは、送信側のソースにおけるbindValueの定義が誤っている可能性があります。
- 解決策としては、bindValueで指定するパラメータの名前(:rdate_yearなど)を、AAA.php内のbindValueの引数と一致させる必要があります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>誤ってないと思うのですが。。。 そう思って見直すと見落とします(汗 >$sqla = "SELECT * FROM AAAAAA WHERE rdateyear = :rdata_year >AND rdatemonth = :rdate_month AND rdateday = :rdate_day"; rdateyearのプレースホルダが、::rdata_yearになっています(bindValueでは':rdate_year')。
その他の回答 (3)
shimixさんの回答で事足りてると思いますが、スルーされた部分を補足的に回答(汗 ArwinさんはbindValueのマニュアルをまず… http://php.net/manual/ja/pdostatement.bindvalue.php bindValue・bindParamともにコロンは必要で、エスケープは自動的にこのメソッドによって行われるため不要。
- shimix
- ベストアンサー率54% (865/1590)
一点だけ・・・ ANo.2で >コロンは、SQL文側での変数宣言する意味合いでしょうから、 >bindvalueの引数にはいらないと思いますよ。 という回答がありますが【必要です】。コロンもプレースホルダ名の一部ですので。 #それ以外の部分は華麗にスルーで(ぉぃ
お礼
shimixさん ANo.1に続き、ありがとうございました。
- Arwin
- ベストアンサー率14% (1/7)
phpはよく知りませんが、まあ、エラーメッセージに書いてありますよね。 そんなパラメータ名知らねえぞって。 bindvalue(':param_name', values); コロンは、SQL文側での変数宣言する意味合いでしょうから、bindvalueの引数にはいらないと思いますよ。 あと、ちなみにですが、Formからポストされた値そのままぶち込むのはどうかと思いますし、dbとのコネクションもロジックの中に直書きして大丈夫ですか? 自分の趣味で作ってるものであればいいですが、私がマネージャーだと怒りますよ。 派遣だったりクビにします。
お礼
Arwinさん ご回答ありがとうございます。 また、ご指摘ありがとうございます。 最近、プログラミングを始めたばかりでして、恥ずかしい限りでございます。 ありがとうございました。
お礼
shimixさん ご回答ありがとうございます。 誤りを修正し、無事にphpが実行できました。 (rdataに気づかず、恥ずかしい限りです) ありがとうございましたm(_ _)m