変数を入れてレコードを取り出したい!そんな動的なクエリではSQLインジェクション対策としてLaravelのORMを利用したエスケープによってお手軽に回避できます。
原則としてORMで書いていって、小難しいクエリは生のSQLで慎重に記述していくのが効率的かな~。毒も喰らう、栄養も喰らう。
postされたid番号を利用してユーザを取り出すクエリの例
危険な組み立て
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; class Person extends Model { protected $table = 'people'; protected $guarded = array('id'); public function getUser($request){ $id = $request->id; $user = mysql_query("SELECT * FROM people WHERE id = $id"); return $user; } } |
ベター ORMを利用する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; class Person extends Model { protected $table = 'people'; protected $guarded = array('id'); public function getUser($request){ $id = $request->id; $user = DB::table('people')->where('people.id', $id)->get(); return $user; } } |
モアベター ORMの汎用メソッドを利用する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; class Person extends Model { protected $table = 'people'; protected $guarded = array('id'); public function getUser($request){ $id = $request->id; $user = Person::find($id); return $user; } } |
find関数はテーブルの主キーでレコードを検索してくれてスマート。
お疲れ様です。