[英]Why does my `if(result !== "false")` return true?
[英]Why does this 'case' query not return 'true' or 'false' in codeigniter
我有一個查詢,用於檢查表中是否存在行。 它應返回“ true”或“ false”值,但事實並非如此。
查詢和代碼如下。 我應該提到我使用CodeIgniter框架,因此使用對象名稱和函數名稱。
$query="SELECT CASE WHEN EXISTS
(
SELECT * FROM Users
WHERE Email=".$this->db->escape($email)."
AND PassWord=MD5(".$this->db->escape($password).")
)
THEN 'TRUE'
ELSE 'FALSE'
END";
$result=$this->users_db->query($query);
$resulting_array=$result->row();
echo "<pre>".var_dump($resulting_array)."</pre>";
此代碼給出以下結果:
object(stdClass)#22 (1) {
["CASE WHEN EXISTS
(
SELECT * FROM Users
WHERE Email='r.blaauwen@erasmusmc.nl'
AND PassWord=MD5('rrt')
)
THEN 'TRUE'
ELSE 'FALSE'
END"]=>
string(5) "FALSE"
}
看來$result->row();
提供了一個對象,而不是數組/字符串/布爾值。 “ FALSE”結果在那里,但是我不知道如何檢索它。
您可以像這樣在sql中創建別名:
$query="SELECT CASE WHEN EXISTS
(
SELECT * FROM Users
WHERE Email=".$this->db->escape($email)."
AND PassWord=MD5(".$this->db->escape($password).")
)
THEN 'TRUE'
ELSE 'FALSE'
END
AS my_result";
$result=$this->users_db->query($query);
$resulting_array=$result->row();
echo $resulting_array->my_result;
或者您可以這樣做:
$resulting_array=$result->row();
//Getting the properties of the given object
$props = get_object_vars($resulting_array);
//Gets the name of the property
$name = array_keys($props)[0];
echo $resulting_array->$name;
MySQL沒有布爾類型,因此如果要將響應視為布爾值,則應使用0
或1
。
接下來,CodeIgniter的數據庫類返回一個標准對象,但是由於您選擇的是未命名的對象,因此它不是很容易訪問。 如果為該字段加上別名,則可以更輕松地訪問它:
$query="SELECT (CASE WHEN EXISTS
(
SELECT * FROM Users
WHERE Email=".$this->db->escape($email)."
AND PassWord=MD5(".$this->db->escape($password).")
)
THEN 1
ELSE 0
END
) AS userExists";
$result=$this->users_db->query($query);
$resulting_array=$result->row();
if ($resulting_array->userExists) {
echo "User Exists!";
} else {
echo "Invalid password/no user";
}
最后,使用MD5哈希密碼是一個非常糟糕的主意 。 閱讀有關密碼的官方PHP文檔,以了解原因:
為什么常見的哈希函數(例如md5()和sha1())不適合密碼?
諸如MD5,SHA1和SHA256之類的哈希算法被設計為非常快速和高效。 隨着現代技術和計算機設備的出現,“蠻力”將這些算法的輸出確定原始輸入變得微不足道了。
由於現代計算機能夠快速“逆向”這些哈希算法,因此許多安全專業人員強烈建議不要將其用於密碼哈希。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.