gpt4 book ai didi

php - 为什么这个 'case' 查询在 codeigniter 中不返回 'true' 或 'false'

转载 作者:行者123 更新时间:2023-11-29 01:38:06 25 4
gpt4 key购买 nike

我有一个查询来检查表中的行是否存在。它应该返回“真”或“假”值,但事实并非如此。

查询和代码如下所示。我应该提到我使用 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(); 传递了一个对象而不是数组/字符串/ bool 值。 “FALSE”结果在那里,但我不知道如何检索它。

最佳答案

MySQL 没有 boolean 类型,所以如果你想将响应视为 boolean,你应该使用 01

接下来,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 散列密码是一个非常糟糕的主意。阅读 official PHP documentation about passwords看看为什么:

Why are common hashing functions such as md5() and sha1() unsuitable for passwords?

Hashing algorithms such as MD5, SHA1 and SHA256 are designed to be very fast and efficient. With modern techniques and computer equipment, it has become trivial to "brute force" the output of these algorithms, in order to determine the original input.

Because of how quickly a modern computer can "reverse" these hashing algorithms, many security professionals strongly suggest against their use for password hashing.

关于php - 为什么这个 'case' 查询在 codeigniter 中不返回 'true' 或 'false',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34003961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com