TOP書籍連動> 特殊文字の扱い
PDOの紹介
PDOの紹介

第3回:データの検索

著者:Ilia Alshanetsky   2005/12/21
前のページ   1  2  3
特殊文字の扱い

   上述の例では、新しいquote()メソッドが使用されています。この関数は、SQLインジェクションがおきないようデータベースシステムに通される値をエスケープするために使用されます。

   これはMySQLのmysql_real_escape_string()関数やPostgreSQLのpg_escape_string()関数などと同じ機能を提供します。この基本的な機能はデータベースのネイティブなエスケープ機能を使用して提供されます。

   もしエスケープ機能がデータベースの機能として使用できない場合は、FALSEが返されます。この場合は、SQLを直接実行するのではなく、プリペアドステートメントを使用するべきとされています。


結果反復子

   PDOStatementオブジェクトで使用可能な便利な機能の1つに、PDOStatementオブジェクトを配列のようにforeach構文を使用して繰り返し処理を行えるというものがあります。

   foreach構文を使用することで、関数を呼び出すことがなくなるのでパフォーマンスを向上させることができます。イテレータを使用する場合のパフォーマンスは、すべての結果をあらかじめ取得しておく必要がなくなり、メモリを節約することができるので、fetchAll()メソッドを使用する場合よりも高く、最速の方法になります。

foreach ($db->query("SELECT id FROM foo") as $v) {
// $v == array(0=>1, 'id'=>1)
}

   イテレータを使用する場合の唯一の制限として、データ取得時のfetchモードの指定を詳細に行うことができない、ということがあげられます。PDOでは他のfetchモードを指定する方法に比べると、わかりにくくなりますが、以下のようにquery()メソッドのオプションの第2引数として指定することができます。

foreach ($db->query("SELECT id …",
PDO_FETCH_COLUMN) as $v) {
// $v == 1
}

   これで、複雑な配列を取得するのではなく$v変数はシンプルな文字列型の変数となりました。この構造ではfetch()メソッドでサポートされるすべてのモードを使用することができます。

   この方法を使用するとquery()メソッドの呼び出し時にfetchモードを指定することができるので、fetch()メソッドの呼び出し時に指定したりsetFetchMode()メソッドを使用する必要がなくなります。

前のページ  1  2  3


Ilia Alshanetsky
著者プロフィール
Ilia Alshanetsky
PHP開発チームの活動メンバーの1人であり、現在のPHP 4.3.X.のリリースマネージャー。また、オープンソース掲示板FUDフォーラム(http://fud.prohost.org/forum/)をはじめとする数多くのプロジェクトにも貢献している。


INDEX
第3回:データの検索
  データの検索
  データ取得処理の向上
特殊文字の扱い