![](/img/trans.png)
[英]MYSQL query for Where clause with OR & AND in LARAVEL
[英]Laravel - using mysql functions on where clause colmn
我有一個使用AES_ENCRYPT加密字段的數據庫
數據已加密並且應保持這種方式,因此無法更改其加密方法。
最近,我開始與Laravel合作開發一個新項目。 當我嘗試對使用AES加密的字段上的where子句進行更新時,收到以下查詢:
SELECT * FROM `users` WHERE `mail` = ? LIMIT 1
和以下綁定:
AES_ENCRYPT('email@email.com', 'somekey')
對於以下代碼:
$email = Input::get('email');
$user = User::where("mail", "AES_ENCRYPT('{$email}', '{$this->aesKey}')")->first();
這基本上是合乎邏輯的-但是如何使用force執行以下查詢:
SELECT * FROM `users` WHERE `mail` = AES_ENCRYPT(?, 'someKey') limit 1
通過此綁定:
email@email.com
希望有一種方法可以將函數傳遞給值的where子句
您可以嘗試whereRaw()
$user = User::whereRaw("mail", "AES_ENCRYPT('{$email}', '{$this->aesKey}')")->first();
或僅使用RAW表達式:
$user = User::where("mail", DB::raw("AES_ENCRYPT('{$email}', '{$this->aesKey}'))")->first();
在laravel 5中,您也可以將whereRaw與綁定一起使用,因此可以獲得正確的轉義和預防注入功能。
只需將綁定數組作為第二個參數。 例如:
$user = User::where("mail = AES_ENCRYPT(:email, :aesKey)", ['email' => $email, 'aesKey' => $this->aesKey])->first();
$user = User::whereRaw("mail = AES_ENCRYPT('{$email}', '{$this->aesKey}')")->first();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.