gpt4 book ai didi

php - 测试用户名或密码哪个字段错误的准备语句

转载 作者:太空宇宙 更新时间:2023-11-03 12:20:16 24 4
gpt4 key购买 nike

检查记录是否与 WHERE 匹配是很常见的。但我今天早上想知道是否有可能发现你是否有部分匹配。如果是这样,哪个是对的,哪个是错的?所以 user_name 可能是正确的,但不是电子邮件地址。

有没有办法不用执行两个不同的查询语句就可以做到这一点?这是我的起始代码。有什么建议吗?

  $query = "SELECT user_name, user_email FROM user_list WHERE (user_name = ?) AND (user_email = ?)";
$stmt = mysqli_prepare($link, $query);
mysqli_stmt_bind_param($stmt, 'ss', $username, $email);

if ($result = mysqli_stmt_execute($stmt));
{
mysqli_stmt_bind_result($stmt, $db_username, $db_email);
$got_match = mysqli_stmt_fetch($stmt);
}

如果答案采用程序方法,我将不胜感激。 :-)

最佳答案

首先,您需要在 where 子句中使用 OR 条件进行部分匹配:

WHERE user_name = ? OR user_email = ?

其次,您需要在选择中添加一些 CASE 语句(或 IF 语句,如果您愿意)以确定哪些项目匹配:

SELECT
user_name,
(CASE WHEN user_name = ? THEN 1 ELSE 0 END CASE) AS user_name_match,
user_email,
(CASE WHEN user_email = ? THEN 1 ELSE 0 END CASE) AS user_email_match

所以把它们放在一起

SELECT
user_name,
(CASE WHEN user_name = ? THEN 1 ELSE 0 END CASE) AS user_name_match,
user_email,
(CASE WHEN user_email = ? THEN 1 ELSE 0 END CASE) AS user_email_match
FROM user_list
WHERE user_name = ? OR user_email = ?

请注意,您需要绑定(bind)所有 4 个参数。

正如其他人在上面的评论中指出的那样,如果您在这里的目的是告诉最终用户是否只有 user_name 或 user_email 匹配,从安全角度来看这可能不是一个好主意。

关于php - 测试用户名或密码哪个字段错误的准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20429118/

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