Laravel

Laravel 変数を使っての動的なクエリの組み立て

  • 2019年2月6日
  • 2019年2月7日
  • 優
  • 6867view
優 Laravel

Laravel

変数を入れてレコードを取り出したい!そんな動的なクエリでは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関数はテーブルの主キーでレコードを検索してくれてスマート。

 

お疲れ様です。

Laravel
最新情報をチェックしよう!
>システム構築・保守に特化した会社です。

システム構築・保守に特化した会社です。

システムの構築・保守運用「システムガーディアン」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG