我有一个使用 AES_ENCRYPT 加密字段的数据库
数据已加密且应保持这种状态,因此无法更改加密方法。
最近我开始使用 Laravel 开发一个新项目。 当我尝试在使用 AES 加密的字段上使用 where 子句进行更新时, 我收到以下查询:
SELECT * FROM `users` WHERE `mail` = ? LIMIT 1
以及以下绑定(bind):
AES_ENCRYPT('email@email.com', 'somekey')
对于下面的代码:
$email = Input::get('email');
$user = User::where("mail", "AES_ENCRYPT('{$email}', '{$this->aesKey}')")->first();
这基本上是合乎逻辑的 - 但我如何使用强制执行以下查询:
SELECT * FROM `users` WHERE `mail` = AES_ENCRYPT(?, 'someKey') limit 1
有了这个绑定(bind):
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();
关于php - Laravel - 在 where 子句列中使用 mysql 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20070053/