簡體   English   中英

Laravel-在where子句colmn上使用mysql函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM