| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
クォートおよびエスケープクォートおよびエスケープ – 値を適切にクォートしてクエリを作成する
DescriptionMDB2 が提供する quote() メソッドを使用すると、DBMS にあわせて値をクォートし、 適切な形式でクエリを作成することができます。 このメソッドのパラメータは次の四つです (必須なのは最初のひとつだけです)。 まずクォートされる値、そしてその データ型、 値をクォートするかどうか、最後にワイルドカードをクォートするかどうかです。 データ型を指定しなかった場合は、値から推測します。 クエリでの値のクォート
<?php
quote() の三番目のパラメータでは、 フィールドをクォートするかどうかを個々に指定することができます。 クォートする値を個々に選択する
<?php
上の例はフィールドをクォートし、できあがる SQL は次のようになります。 INSERT INTO sometable FIELDS (textfield1, boolfield2, datefield3) VALUES ('blah', 1, '2006-02-21') values のところには、追加される値が適切に入ります。 お気づきのとおり、"boolfield2" はクォートされていません。これは quote() メソッドで FALSE を指定したからです。 注意: プリペアドステートメント を使用する場合は、このクォート処理が自動的に行われます。 そのため自分でクォートする必要はありません。 識別子データベースの識別子 (テーブル名やフィールド名) を quoteIdentifier() でクォートすることができます。この方式は、使用しているデータベースドライバに依存します。 注意: 識別子をクォート「できる」からといって、必ずしもクォート 「しなければならない」というわけではありません。たいていの場合は、 クォートすることで解決する問題よりもクォートすることで新たに起こる問題のほうが大きくなります。 とはいえ、たとえばフィールド名に予約語を使用したい場合などは、 クォートが必要になるでしょう (このような場合は、 できる限りフィールド名を変更することをお勧めします)。 また、テーブル名にピリオドを含む場合も quoteIdentifier() は使わないでください (って言うか、 そもそもテーブル名にピリオドを使うっていうこと自体おすすめしません)。 というのも、そんな形式のテーブル名は「スキーマ名.テーブル名」 形式と誤解されてしまうことがあるからです。 MDB2 の内部メソッドの中にはクエリを生成するものがあります。 MDB2 のオプション quote_identifier を有効にすると、 これらのクエリ内の識別子をクォートするよう MDB2 に指示することができます。 ユーザが作成したクエリには、このオプションは何の影響も及ぼしません。 クォートされた識別子の中で次の文字を使用すると、 可搬性が失われます。
クォートされた識別子は、以下のドライバで正常に動作します。
クォート方式MDB2 API には、 クォート方法を指定するためのオプションが多数あります。 たとえば単に抽象化時の識別子だけをクォートするものや、 プリペアドステートメントでのinsert/update などの際にフィールドの値をクォートするものなどがあります。 quote_identifier オプションを使用すると、 すべてのフィールド識別子が SQL 文中で自動的にクォートされます。
<?php こうすると、結果の SQL 文ですべてのフィールド名がバックティック演算子 '`' で囲まれます (MySQL の場合)。 SELECT * FROM `sometable` WHERE `id` = '123'; 指定しなければ、以下のようになります。 SELECT * FROM sometable WHERE id='123';
エスケープ値をクォートで囲まずにエスケープしたい場合は escape() メソッドを使用します。ワイルドカード (_ や %) もエスケープしたい場合は、二番目のパラメータを TRUE に設定します。 値の中のワイルドカードのみをエスケープしたい場合は、 escapePattern() メソッドを使用します。 |
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「クォートおよびエスケープ」をGoogle検索
|