2016-04-23 6 views
0

Ich verwende eine SELECT COUNT(*), um zu überprüfen, ob ein Benutzer mit PHP PDO und MySQL existiert. Ich möchte auch einen bestimmten Spaltenwert erhalten. Es gibt immer nur einen Wert/Zeile oder keinen Wert/Zeile pro Benutzer.Kann ich Zeilen zählen und gleichzeitig einen Spaltenwert mit SQL abrufen?

Ich versuche, so etwas zu tun:

$stmt = $link->prepare('SELECT COUNT(*) AND column FROM table WHERE user=:user'); 

Was ich hoffe zu bekommen zurück, 1, und der Spaltenwert. Wo kann ich dann den Spaltenwert an eine Variable binden.

Wenn nicht, muss ich zuerst die SELECT COUNT(*) tun dann eine andere Abfrage, um den Spaltennamen nach der Überprüfung, dass der Benutzer und diese Spalte besteht aus der SELECT COUNT(*) Abfrage.

+0

Warum nicht einfach die Spalte auswählen und sehen, wie viele Zeilen zurückgegeben werden? – Graeme

+0

@Graeme Ich habe keinen Grund, nicht, ich versuche zu "optimieren" und Sie könnten mir nur geholfen haben, lassen Sie mich das versuchen. – janicehoplin

+0

Hoffe so :) Entweder zählen Sie die Anzahl der Zeilen oder überprüfen Sie für einen Nullwert (vorausgesetzt, null ist offensichtlich kein gültiger Wert für diese Spalte :)) 'leer 'ist wahrscheinlich ein guter Test zu machen – Graeme

Antwort

-1
SELECT count(*), column FROM table where user=:user 

Es ist was willst du nicht?

Ansonsten können Sie die Anzahl des Ergebnisses in php zählen

$pdo = new PDO('mysql:host=XXX.fr.mysql;dbname=YYYY', 'ZZZ', 'TTT', $pdo_options); 

    $response = $pdo->query('SELECT column FROM table'); 
    $count = 0; 
    while ($data = $response->fetch()) 
    { 
     $count++; 
    } 
    $reponse->closeCursor(); 
+0

Ich bin mir nicht sicher , ist das "SQL legal"? Ich werde es versuchen und sehen, was passiert. – janicehoplin

+0

Sie können auch einen Alias ​​für Ihre Zählung verwenden. Wählen Sie count (*) als Summe, Spalte aus der Tabelle usw. Es funktioniert Ich denke – Letsrocks

0

Sie brauchen nur ein wenig zu denken.

"count (*)" ist keine spezielle Methode "um zu überprüfen, ob ein Benutzer existiert". Es ist nur eine Abfrage, wo Sie zählen, weil Sie nur keine Ahnung haben, was Sie sonst auswählen.

Aber solange Sie eine Spalte auswählen müssen, brauchen Sie keine Zählungen mehr.

daher nur Ihren Wert auswählen, und so lange, wie Sie es bekommen, können Sie sagen, dass ein Benutzer

$stmt = $link->prepare('SELECT column FROM table WHERE user=:user'); 
$stmt->execute([$user]); 
$col = $stmt->fetchColumn(); 

if ($col) { 
    // user exists 
    $something = $col; // use $col as you wanted 
} 

existiert Während Zählung Auswahl() und eine Spalte ohne eine Gruppe von Operator ist ein heikele Abfrage, und Sie sollten es im Allgemeinen vermeiden.

+0

Ich verifiziere, dass der Benutzer existiert oder diese Zeile existiert wegen der WHERE user =: user Klausel – janicehoplin

+0

Ihre Methode ist sauberer, ich werde es versuchen, danke für das Trinkgeld. – janicehoplin

+0

Leider konnte ich das nicht zur Arbeit bringen. Ich weiß nicht, ob die Zeile $ stmt-> execute ([$ user]); ist immer noch bindParam zur Verhinderung der Injektion. Abgesehen davon habe ich es immer noch ausprobiert und war nicht in der Lage, eine Zeile oder "Spalte" auszugeben. – janicehoplin

Verwandte Themen