
変数を入れてレコードを取り出したい!そんな動的なクエリではSQLインジェクション対策としてLaravelのORMを利用したエスケープによってお手軽に回避できます。
原則としてORMで書いていって、小難しいクエリは生のSQLで慎重に記述していくのが効率的かな~。毒も喰らう、栄養も喰らう。
postされたid番号を利用してユーザを取り出すクエリの例
危険な組み立て
<?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を利用する
<?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;
}
}
Laravelはデフォルトでエスケープしてくれる
モアベター ORMの汎用メソッドを利用する
<?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;
}
}
ORMで用意されている汎用のメソッドを利用すると記述がシンプルに簡単になります。
find関数はテーブルの主キーでレコードを検索してくれてスマート。
お疲れ様です。
