PHPでSQL文 何度もミスるケース
ここのところ、同じミスばかりやってます。
そして、それになかなか気づかない…。
PHPでSQL文を作成するときです。
例えば、DBからユーザー名が"名無しさん"の行を取得する場合…
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
$str='名無しさん';
$query="SELECT * FROM tbl_test WHERE name='".$str."'";
?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
とソースを書いてますが、
'".$str."'
で、いつも外側の
シングルクォーテーションを付け忘れてしまうんですよ…。
name=".$str."
ってな具合に。
しかし、よくよく考えてみたら、SQL文全体を
ダブルクォーテーションで囲んでいるんですから、
'$str'
という形でOKなんですよね。
はじめからこうすれば、余計なミスをせずにすんだのに…。
時刻の場合も
'".date('Y-m-d H:i:s')."'
とせずに、一旦変数に格納しておいて、その変数を
SQL文に挿入すればOK。
(※SQLiteの関数datetime()は使いたくないです…。
バージョン2と3で現在時刻を取得するための表記が
異なりますから…。
SQLite2→datetime('now')
SQLite3→datetime(CURRENT_TIMESTAMP)
)
ダブルクォーテーションの中の変数は展開されるという
機能を、忘れずに上手に活用したいです…。