1

我有一个users表和一个users_banlist表。

在我的注册表单上,我想在一个查询中检查某人在表单上输入的用户名是否存在于 users 表中,并查看它是否也存在于 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';
}

基本上我认为这与执行或rowCount()有关,谁能告诉我哪里出错了?作为 pdo 的新手,我现在发现它有点令人困惑。

4

2 回答 2

1

改用 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 相同

于 2012-04-14T11:24:10.203 回答
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 个结果

于 2012-04-14T11:04:20.350 回答