检查两个表PHP PDO上是否存在用户名?

时间:2012-04-14 10:55:23

标签: php pdo mysqli multi-query

我有一个用户表和一个 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的新手,我现在发现它有点令人困惑。

2 个答案:

答案 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相同