雄辩的查询错误

时间:2017-06-27 08:21:16

标签: php oracle laravel-5 eloquent

我对Laravel 5.4和Eloquent Query构建器非常绝望。 我正在尝试通过用户名和密码检索用户。

我在db:ID,USERNAME,PASSWORD

中跟踪了列

以下查询对我有用:

$user = UserModel::where(['username' => $username])->first();

虽然这不是:

$user = UserModel::where(['password' => $password])->first();

我在查询之前打印出$username$password,两者都是它们应该是的。

我可能做错什么?

编辑:

  • 是的,我确实以纯文本存储密码。
  • 该方法是基于Zend-xmlrpc-server
  • 的API的一部分
  • PHP不会返回任何错误或异常
  • Xmlrpc服务器返回“404 Unknown error”故障响应。
  • 是的,我确信,这些值不包含任何不可见的字符,而且确实是正确的。
  • 值在请求中被硬编码,我也尝试在查询中直接对它们进行硬编码,结果相同。
  • 我正在使用Oracle(我认为11g),Laravel 5.4,PHP 5.6
  • 值对是正确的,此用户名属于此密码,两者的格式与数据库中的格式完全相同。

我尝试了以下相同结果的查询形式:

$user = UserModel::where('password', $password)->first();   
$user = UserModel::where(['password' => $password])->first();
$user = UserModel::where('password', '=', $password)->first(); 

使用用户名的变体会产生与上述第一个完全相同的结果。

2 个答案:

答案 0 :(得分:0)

密码不以纯文本格式保存,因此您必须先输入哈希

$password = Hash::make('plaintext');
$result = User::wherePassword($password)->first();

答案 1 :(得分:0)

问题解决了,但我不确定是什么造成的。 问题是,Eloquent与oci8驱动程序(oracle驱动程序)将所有列名转换为大写,但'password'是某种保留关键字,无法转换并保持小写。虽然Oracle区分大小写(对于列和表名称)但它不起作用。我将'密码'列的名称更改为'密码',一切都立即生效。