Vla*_*rov 0 php mysql encryption eloquent laravel-4
我有一个使用AES_ENCRYPT的加密字段数据库
数据是加密的,应该保持这种状态,因此无法更改加密的方法.
最近我开始与Laravel合作开展一个新项目.当我尝试使用AES加密的字段上的where子句进行更新时,我收到以下查询:
SELECT * FROM `users` WHERE `mail` = ? LIMIT 1
Run Code Online (Sandbox Code Playgroud)
以下绑定:
AES_ENCRYPT('email@email.com', 'somekey')
Run Code Online (Sandbox Code Playgroud)
对于以下代码:
$email = Input::get('email');
$user = User::where("mail", "AES_ENCRYPT('{$email}', '{$this->aesKey}')")->first();
Run Code Online (Sandbox Code Playgroud)
这基本上是合乎逻辑的 - 但是如何使用force它执行以下查询:
SELECT * FROM `users` WHERE `mail` = AES_ENCRYPT(?, 'someKey') limit 1
Run Code Online (Sandbox Code Playgroud)
有了这个绑定:
email@email.com
Run Code Online (Sandbox Code Playgroud)
希望有一种方法可以将函数传递给值的where子句
你可以试试whereRaw()
$user = User::whereRaw("mail", "AES_ENCRYPT('{$email}', '{$this->aesKey}')")->first();
Run Code Online (Sandbox Code Playgroud)
或者只是使用RAW表达式:
$user = User::where("mail", DB::raw("AES_ENCRYPT('{$email}', '{$this->aesKey}'))")->first();
Run Code Online (Sandbox Code Playgroud)