php - Laravel - 在 where 子句列中使用 mysql 函数

标签 php mysql encryption laravel-4 eloquent

我有一个使用 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/

相关文章:

javascript - 我如何使用 AJAX 将隐藏值提交给 php

javascript - jQuery Ajax JSON PHP 自动提示重复数据显示

mysql - SQL - MVC - 插入到 2 个表中

sql-server - 加密密码损坏 - 有些保存为加密,有些未加密,有些未保存

php - Codeigniter - 路由到 Controller (如果存在),如果不存在则使用默认值

java - ElasticSearch 轮询不起作用

mysql - MySql触发器语法错误: While_Sym

powershell - 使用公钥对密码字符串进行加密和编码

php - 如何使用php加密服务器上的数据并使用javascript解密客户端上的数据

php - 从 mysql 查询中创建多个页面