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