PHPのSQL文のデバッグ方法とコーディング方法について
http://okwave.jp/qa3663217.html
上記のANo.2の回答についての疑問です
本来上記の回答者に対して便乗質問すればよかったのですが、
早々に締め切られてしまったので新しく質問させていただきます。
☆上記のANo.2でSQLのデバッグ方法が回答されいる(下記に抜粋)のですが、
(1)は一般的なSQLデバッグ方法なのでしょうか?
(2)は一般的なSQLの記述方法なのでしょうか?
●ANo.2の抜粋
(1)SQL文はヒアドキュメントをつかう
(2)テーブルやフィールドはバッククォート、値はシングルクォートでくくる
(3)変数は{$hoge}形式で参照する
(4)SQL文の最後になるべく;はつけない
(5)エラーはmysql_error()で確認する。
●抜粋終わり
○私が疑問に思う理由は下記のとおりです。
(1)はHTML文を出力するには有効な機能だと思います
しかし、SQLをデバッグする場合(特に動的SQLをデバッグする場合)、
最終的に加工されたSQL文をvar_dump,echo,print等で一切加工せずにデバッグしないと、
ヒアドキュメントへ加工中にSQLが(タイプミスとかカットアンドペーストミス)変わってしまう可能性があり、正しくデバッグできない可能性があると思います。
特にデバッグする人は、SQLをヒアドキュメントへ転記中に無意識のうちに正常なSQLに変換してしまっていて、バグの原因が掴めないなんてケースは結構見てきました。
デバッグする人は何がバグっているのかを探っているはずので、出来るだけデバッグ対象コードはまず生のまま見るべきだと思っています。
また、デバッグ終了後にデバッグ文を消す作業が発生し、
誤ってデバッグコード以外の必要なコードも削除してしまう恐れもあります。
var_dumpであれば、一括置換でコメントアウトしたり出来ますし、
あるいは、var_dumpをラップする関数を用意しておき、
デバッグフラグがONの場合のみvar_dumpを走らせるようにしておけば、
var_dumpを削除する作業そのものが不要で、
必要な時にデバッグON/OFF出来るかと思います。
(2)は「値はシングルクォート」(※1)は納得できるのですが、
「テーブルやフィールドはバッククォート」(※2)は、※1と混在してSQLを書いた場合、どれが列名でどれが変数(または定数)なのか、判別しにくくなり、
余計なバグを混入させたり、可読性を落としたりすると思います。
お礼
以前、掲示板形式のバグの報告を受けた事もありましたが、URLさえ知っていれば、誰でも見れてしまいました。意外と気にしない物なんですかね。 quenistaさんもWebベースということですが、セキュリティー対策はどの程度だったのか、よろしければ教えてください。 >「不具合連絡票」「設備連絡」「バグ通知書」 ははは、みんな好き勝手に呼称しているんですね。 ありがとうございます。