PHP SQlite3 クエリ内の変数にはbindValueを使用する

防備録

手軽に使えるデータベースということでSQLITE3をよく使います。
PHPの場合、文字列変数内でも変数が容易に展開されるため
下記のだめな例みたいなクエリを書きがち

 

だめな例

上記は、短く書けるが、 変数部の内容がセーフか保証されないため禁止
書きなぐってるときやりがち→PHPで文字列中でも変数が展開されるから更にやりがち

正しくはプレースホルダかバインドする

 

 

セレクト文の場合も同様に下記のようなクエリを作成する

 

解説

なにがだめなのか?
① 変数の内容に エスケープ文字列等あった場合、warningが出ます。
② セキュリティ上 、インジェクションが可能になるため危険です。

 

おまけ

SQL文書き捨てているときやりがちなんだけど、実際はなにかエラーが出るまで見落としがちでした。

クローズ環境で使用している時など、エラーがなければOKみたいな使い方してたけど
音楽系のデータまとめててB’zが処理できなくて再度まとめました(笑)
使用したのはこのサイト
(楽曲情報と歌の最低音と最高音をデータベース化)

 

koo

Java,PHP,Ruby,android,ios,C#,C++,python,vba,unity,sqlなんでも手を出しては挫折する系。電子工作はじめました。

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です