FuelPHP の DB への問い合せは SQL を抽象化した「Query Builder」を使いますが、where句が複雑な場合や副問い合せを行う場合などはメソッド呼び出しが多くなりコードの見通しが悪くなってしまうので、直接 SQL を記述したくなります。
例)Query Builder を使う場合
// 下記SQLを Query Builder を使って記述すると
// SELECT * FROM `users` WHERE `name` != "John" AND `surname` = "Doe"
// AND (`email` = "jim@jim.com" OR `email` = "haha@joke.com")
// 下記のようになります。
$query = DB::select('*')->from('users');
// 最初の where ステートメントをセット
$query->where('name', '!=', 'John');
// あたらしい条件を追加
$query->and_where('surname', 'Doe');
// ネストした where をコールバックで
$query->where(function($query){
$query->where('email', 'jim@jim.com')
->or_where('email', 'haha@joke.com');
});
例)SQL を直接記述する場合
SQL を直接記述する際は DB::query() を使いますが、この場合 Query Builder で行われていた値のエスケープは行われませんので、DB::quote() を使って個別に行います。quate() はエスケープの他にもメソッド名の通りクウォーテーションもしてくれます。
$name = DB::quate($name);
$surname = DB::quate($surname);
$email1 = DB::quate($email1);
$email2 = DB::quate($email2);
$query = "SELECT * FROM users WHERE name != $name AND surname = $surname AND (email = $email1 OR email = $email2)";
$users = DB::query($query, DB::SELECT)->as_object('Model_User')->execute();
0 件のコメント:
コメントを投稿