我有一个用户表和一个 users_banlist 表。
在我的注册表单上,我想在一个查询中检查用户表中是否存在用户输入的用户名是否存在于users_banlist表中。
我可以在个人查询中自己完成它们,但宁愿一次性完成。
这是我得到的,但即使我输入了一个用户名,但它并没有告诉我它已经被拍摄了。
$stmt = $dbh->prepare("
SELECT
users.user_login,
users_banlist.user_banlist
FROM
users ,
users_banlist
WHERE
users.user_login = ? OR
users_banlist.user_banlist = ?");
// checker if username exists in users table or users_banlist table
$stmt->execute(array($username, $username));
if ( $stmt->rowCount() > 0 ) {
$error[] = 'Username already taken';
}
基本上我认为这与execute或rowCount()有关,有谁能告诉我哪里出错了?作为pdo的新手,我现在发现它有点令人困惑。
答案 0 :(得分:1)
您可以使用查询
SELECT
users.user_login
FROM
users
WHERE
users.user_login = ?
UNION ALL
SELECT
users_banlist.user_banlist
FROM
users_banlist
WHERE
users_banlist.user_banlist = ?
然后正常进行。您使用的是CROSS JOIN,它返回产生行的笛卡尔积,该行将第一个表中的每一行与第二个表中的每一行组合在一起。如果其中一个表返回0行,则得到0结果
答案 1 :(得分:0)
使用SQL JOINS代替
SELECT
users.user_login,
users_banlist.user_banlist
FROM
users INNER JOIN
users_banlist ON users.ID=users_banlist.user_id
WHERE
users.user_login = ? OR
users_banlist.user_banlist = ?
其中users.ID和users_banlist.user_id相同