检查记录是否与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 = ?
其次,您需要在select中添加一些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 = ?
请注意,您需要绑定到所有4个参数。
正如其他人在上面的评论中指出的那样,如果您在这里的意图是告诉最终用户是否只有user_name或user_email匹配,那么从安全角度来看,这可能不是一个好主意。