SQL文をPHP内で書くときの注意

 SQL文はPHP内に書く場合、ちょっと特殊な書き方をするので以下のように書けば間違いが少なくなります。
  1. SQL文はヒアドキュメントをつかう
  2. テーブルやフィールドはバッククォート、値はシングルクォートでくくる
  3. 変数は{$hoge}形式で参照する
  4. SQL文の最後になるべく;はつけない
  5. エラーはmysql_error()で確認する

SQL文はヒアドキュメントをつかう

$sql=<<< EOF
create database '{$c_database_name}' ←こんな風に改行できます。
character '{$character_set}'
EOF;

$result=mysql_query($sql) or die($sql.mysql_error());
 ヒアドキュメントを使う利点は、SQL文を項目ごと(コマンドごと)に改行してわかりやすくできるという点が一つ。もう一つは複数のSQL文がある際にはSQLを別々に保存できることと、使いまわしができるという点です。特に限定したSQL文しか使わないという場合は別ファイルにライブラリー化しておくこともできます。概してコードがすっきりするのでデバックしやすい。

テーブルやフィールドはバッククォート、値はシングルクォートでくくる

$sql=<<< EOF
update '{$DATANAME}'
set `rem`='{$new_rem}' ←remでもいいんですが、できれば`rem`
where `id`='{$id}'
EOF;

$result=mysql_query($sql) or die($sql.mysql_error());
 SQL文の中身をわかりやすくするためにちょっと手間ですがバッククォートを使うとなかなかいい感じになります。SQL文に限りなく似ているテーブル名やフォールド名の場合は尚更で、バッククォートしているとわかりやすいです。

SQL文の最後になるべく;はつけない

 これはPHPの;と間違ってしまうからです。SQL文はPHP内で利用できますが質も形式もまるで違う他所様のコマンド群なのでできれば差別化したいところです。ですので;はSQL文の証明としてできればつけたくないです。(ちなみに端末からのコマンドでは;を最後につけないと動きませんが...。)

変数は{$hoge}形式で参照する

 変数は、$hogeで十分作動しますが、できれば{$hoge}でいくのがいいです。これもPHPの変数と間違うからです。

エラーはmysql_error()で確認する

 or die()の中身は自身でエラーを書き込んでもいいのですが、そこら辺りはSQLに任せてmysql_error()で確認するのが一番いいです。かなり詳細にエラーを吐いてくれるので。



 







プロフィール



  • Name :: 山上オサム ♂(37)
  • Hobby :: 武術
  • Work :: Web Designer