学習記録

プログラミングの学習中に調べて解決したこと等の記録です。

Invalid parameter number: parameter was not definedというエラーの解決方法について

 

 エラーの内容

エラー発生:SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

  

 

「パラメータが定義されてない」という内容のようなので、SQL文自体の書き方を見直し、直接PHPMYAdmin内で実行してみましたが実行できてしまったため、何が原因か困っていたところこちらの記事を見つけました。

 

https://stackoverflow.com/questions/52319288/php-pdo-sqlstatehy093-invalid-parameter-number-parameter-was-not-defined

 

 記事を参考にし、「予約語」を使っていないか確認したところ、カラム名の「data」が予約語でした。

$sql = 'INSERT INTO post(date, comment, users_id, create_at) 
 VALUES(:date, :comment, :users_id, :create_at)';

  

予約語についてはこちら

https://dev.mysql.com/doc/refman/8.0/en/keywords.html

 

バッククォートを使用すると予約語でも使えるようですが、不安要素をわざわざ残してしまってはいけないので、カラム名予約語から変更し、SQL文もカラム名に合わせて直して、無事データが登録できて終わりました。 

 

ただ、リファレンスを見るとcommentも予約語のはずなのですが、こちらはエラーがでておらず、なぜ大丈夫だったか今のところ分かっておりません。

分かり次第追記したいと思いますが、まずは予約語は使用しないということを今後守っていきたいと思います。