2012-04-14 5 views
1

Ich habe eine Benutzer Tabelle und eine users_banlist Tabelle.Überprüfung ist Benutzername existiert auf zwei Tabellen PHP PDO?

Auf meinem Registrierungsformular möchte ich alle in einer Abfrage prüfen, ob der Benutzername, den jemand in Formular eingegeben hat, in der Benutzertabelle existiert und ob er auch in der users_banlist -Tabelle existiert.

Ich kann sie dort in einzelnen Abfragen selbst machen, würde aber lieber alles in einem machen.

Hier ist, was ich habe, aber obwohl ich einen Benutzernamen eingeben, der genommen wird, sagt es mir nicht, dass es bereits vergeben ist.

$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'; 
} 

Grundsätzlich denke ich, es ist etwas, mit dem Ausführen oder rowCount() zu tun, könnte mir jemand sagen, wo ich falsch gehe? Da ich neu bei PDO bin, finde ich es im Moment etwas verwirrend.

Antwort

1

könnten Sie verwenden die Abfrage

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 = ? 

und dann wie gewohnt fort. Was Sie verwendeten, ist ein CROSS JOIN, der das kartesische Produkt zurückgibt, das Zeilen erzeugt, die jede Zeile aus der ersten Tabelle mit jeder Zeile aus der zweiten Tabelle kombinieren. Wenn einer dieser Tabellen 0 Zeilen zurückgibt erhalten Sie 0 Ergebnisse

+0

danke, funktioniert super und eine Suche durchgeführt auf UNION und UNION ALL und wussten nie, dass sie existierten, sie werden sich für andere zukünftige Fragen als nützlich erweisen, also danke für Ihre Hilfe :) phplover – PHPLOVER

0

Verwenden Sie SQL JOINS statt

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 = ? 

wo users.ID und users_banlist.user_id gleich sind

+0

irgendeinen Grund, insbesondere warum Joins über Union zu verwenden? danke phplover – PHPLOVER

+0

ich überprüfte nicht die erste Linie richtig die Vereinigung ist die richtige Antwort für diese –

+0

ok danke, noch schätzen Sie Ihre Zeit in versuchen zu helfen, danke phplover – PHPLOVER