- ベストアンサー
ヒアドキュメントでSQLを書く事について
ヒアドキュメントを使ってSQLクエリを書くのは良くないという話を聞いたのですが、どのようなデメリットがあるのでしょうか? あと、購入した書籍に INSERT INTO テーブル名 SET フィールド名=入力値 というSQLが書いてあったのですが、 INSERT INTO テーブル名 (フィールド名) VALUES(入力値) とどちらが一般的な記述方法なのでしょうか? それぞれにメリット・デメリットなどありましたら教えて下さい。 PHPを始めて間もないため不安が多く質問ばかりですみません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>ヒアドキュメントを使ってSQLクエリを書くのは良くない 別に良くないわけではありません。 実際私も書いてて特に問題におもったことはありません。 (まぁ私の場合はSQLは外部ファイルに持つことが多いので ヒアドキュメントを使うのはデバッグの際にダイレクトに PHPソースにSQLをかくときくらいなのですが・・・) ただ、この件については以前この掲示板でも執拗に叩かれた ことがあり、まぁそう思っている人も少なからずいるのかなぁとも 思います。 実際の理由については、最近のSQLにおいてはプリペアドステートメント で処理できるようになったことや、セキュリティの高いクラス処理が 充実してきたのが大きいと思います。 つまりヒアドキュメントというよりは平打ちのSQLに変数を入れてしまう ことによるセキュリティの問題でしょう。 スピードの面を指摘される場合もありますが、これはよほどの ことがないかぎり、ほとんどかわらないため無視してかまいません。 >INSERT INTO テーブル名 SET フィールド名=入力値 >INSERT INTO テーブル名 (フィールド名) VALUES(入力値) SQLは多様な書き方があり、どちらかが完全にすぐれているという ものではありません。 前者はUPDATE構文にちかく直感的な書き方なので、人為的なミスが 減りそうです。しかし複数のデータを処理したりするときには 後者の方がやりやすいでしょう。 個人的には後者の書き方をすること多いです
お礼
お返事ありがとうございます。 プログラミングに慣れず、任意の場所で改行可能なヒアドキュメントは大変便利に使っておりますが、知人にヒアドキュメントは使わない方が良いといわれ、理由も教えて貰えなかったので少し不安でした。 >ヒアドキュメントを使うのはデバッグの際にダイレクトに >PHPソースにSQLをかくときくらいなのですが・・・ SQLの外部ファイル化ですか・・・。PHPってそんな事も出来るんですね。 >実際の理由については、最近のSQLにおいてはプリペアドステートメント >で処理できるようになったことや、セキュリティの高いクラス処理が >充実してきたのが大きいと思います。 プリペアドステートメントについては、先日yambejpさんにご回答頂いた「arraymapを使ったエスケープ処理」の記事で別の方が触れていらっしゃったので調べてみて「私にはまだ難しいかな」などと思っていたのですが、やはり利用するのが一般的なのですね。 壁の高さを感じますが、挑戦してみます。 >SQLは多様な書き方があり、どちらかが完全にすぐれているという ものではありません。 状況や好みによって使い分けても良いのですね。 ネットや他の書籍では INSERT INTO テーブル名 (フィールド名) VALUES(入力値) という書式を見かける事が多く、 INSERT INTO テーブル名 SET フィールド名=入力値 という書式は始めてみたので使って良いのか不安でした。 長くなって申し訳御座いませんが、お返事本当にありがとうございました。 また何かあればよろしくお願いします。