No.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 フィールド名=入力値
という書式は始めてみたので使って良いのか不安でした。
長くなって申し訳御座いませんが、お返事本当にありがとうございました。
また何かあればよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
phpでテーブルを作る際変数によ...
-
PhpMyAdmin
-
出勤表の作り方
-
予約システム
-
変数にNULLを代入したい
-
MDB2エラーが対応出来ません。
-
実行時エラー3131 FROM 句の構...
-
JAVA SQLServerException 列名 ...
-
<VB.NET>INSERT文でDBにデータ...
-
ResultSetインターフェイスでの...
-
dbに登録したデータをphpのプル...
-
PHP+MySQLでの配列のinsert文に...
-
データフォームウィザードで追...
-
in 'where clause'のエラーの理由
-
VBA処理追加 こちらでご教示頂...
-
子プロセス終了で閉じてしまうm...
-
INSERT,DELETEを同時に
-
phpのエラーについてです
-
VBAをつかってクエリの情報を抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
トランザクション処理
-
MySQLでデータベースにデータin...
-
PHPシステムでSQLのUPDATEがあ...
-
変数にNULLを代入したい
-
phpにて出欠登録管理を作成して...
-
csvをDBへ読み込んだら、NULLが...
-
php sqlite count 列数取得
-
クエリObjectをforeachで回す時...
-
PHPでフォームからデータDBに書...
-
DB Error: no such field
-
日またぎの計算
-
OracleからAccessへのインポート
-
PHPでいいね機能を作りたいので...
-
PHP PDOを利用してカラムの削除...
-
PHPでPostgreSQLのテーブルを表...
-
SQLで返り値が空とでる
-
PHP prepare フィールド名をエ...
-
PHPでmySQLのテーブルを作成したい
-
外部結合で参照列が複数あるSQL
-
MDB2エラーが対応出来ません。
おすすめ情報