2012-04-14 70 views
1

我有一个用户表和一个users_banlist表。检查用户名是否存在于两个表PHP PDO?

在我的注册表单上,我想检查所有在一个查询中是否有人在表单上输入的用户名存在于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的新手,我目前发现它有点混乱。

回答

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结果

+0

谢谢你,伟大工程,上进行搜索UNION和UNION ALL,永远不会知道他们存在,他们会派上用场,为其他未来的查询,所以感谢您的帮助:) phplover – PHPLOVER 2012-04-14 11:18:33

0

使用SQL连接,而不是

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

+0

任何原因特别是为什么要使用联合联盟?谢谢phplover – PHPLOVER 2012-04-14 11:48:08

+0

我没有检查第一行正确的工会将是这个 – 2012-04-14 12:05:11

+0

好的谢谢你的正确答案,仍然感谢你的时间试图帮助,谢谢phplover – PHPLOVER 2012-04-14 12:35:17