2017-06-27 97 views
0

我對Laravel 5.4和Eloquent Query builder非常不滿。 我正在嘗試通過用戶名和密碼來檢索用戶。雄辯的查詢錯誤

我在我的數據庫已經下列:ID,用戶名,密碼

下面的查詢是爲我工作:

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

,而這個人是不是:

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

我在查詢之前打印出$username$password,兩者都是他們應該是的。

我可能做錯了什麼?

編輯:

  • 是的,我確實明文存儲密碼。
  • 該方法是基於Zend的-XML-RPC服務器
  • PHP不返回任何錯誤或異常
  • XML-RPC服務器返回「404未知錯誤」故障響應對API的一部分。
  • 是的,我確定,這些值不包含任何看不見的字符,確實是正確的。
  • 值在請求中被硬編碼,我也試着用相同的結果在查詢中直接對它們進行硬編碼。
  • 我正在使用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(); 

變化與用戶名導致完全相同的結果中提到的第一個。

+1

你真的以純文本存儲密碼嗎? –

+0

好的。事情是,如果第一個人得到你想要的,而第二個人沒有,那麼它更像是「它實際上找不到」,而不是「有錯誤」。 – apokryfos

+0

是的,我這樣做,這是一個不好的做法,但這只是測試用例,而不是生產。 –

回答

0

問題解決althought我不完全確定什麼原因造成的。 問題是,與oci8驅動程序(oracle驅動程序)的雄辯轉換所有列名爲大寫,但'密碼'是某種保留關鍵字,無法轉換,並保持小寫。雖然Oracle區分大小寫(對於列名和表名),但它不起作用。我將「密碼」欄的名稱更改爲「密碼」,並立即生效。

0

的密碼不會被保存在純文本格式,所以你必須散列輸入第一

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

密碼以純文本格式保存。他們不應該,但他們是。 –

+0

試試這個用戶:: where('password',$ password) - > first(); –

+0

我沒有成功,請參閱編輯的問題。 –