2016-06-22 4 views
2

Jemand sagte mir rowCount nicht sicher, also ich mag es hier zu fragen, ich habe 2 Beispiele und möchte wissen, was ist der sicherste und nette Weg zu überprüfen, ob etwas existiert ?Was ist der beste Weg zu überprüfen, ob etwas mit PDO existiert

$sql = "SELECT count(*) FROM users WHERE username = 'administrator'"; 
$result = $db->prepare($sql); 
$result->execute(); 
echo $result->fetchColumn() ? 'true' : 'false'; 

oder

$sql = "SELECT username FROM users WHERE username = ?"; 
$result = $db->prepare($sql); 
$result->execute(array('administrator')); 
echo $result->rowCount() ? 'true' : 'false'; 
+1

Wenn Sie das Handbuch betrachten, gibt es einen Hinweis auf die Funktion 'rowcount' zu diesem genauen Problem. 'Bei den meisten Datenbanken gibt PDOStatement :: rowCount() nicht die Anzahl der Zeilen zurück, die von einer SELECT-Anweisung betroffen sind. Verwenden Sie stattdessen PDO :: query(), um eine SELECT COUNT (*) -Anweisung mit denselben Prädikaten wie Ihre beabsichtigte SELECT-Anweisung auszugeben, und verwenden Sie dann PDOStatement :: fetchColumn(), um die Anzahl der Zeilen abzurufen, die zurückgegeben werden. Ihre Anwendung kann dann die richtige Aktion ausführen. "Http://php.net/manual/en/pdostatement.rowcount.php (Beispiel # 2) – chris85

+0

@kamalpal die Anzahl der Zeilen zu erhalten und die Existenz zu überprüfen sind zwei verschiedene Aufgaben. –

+0

@ YourCommonSense stimmte zu, aber der Ansatz wäre der gleiche. –

Antwort

3

Der beste Weg, um es mit prepare und fetchColumn

SELECT COUNT (*) Anweisung mit denselben Prädikaten wie Ihre SELECT-Anweisung sollte geprüft werden, dann verwenden PDOStatement::fetchColumn() zum Abrufen der Anzahl der Zeilen, die zurückgegeben werden.

$sql = "SELECT COUNT(*) FROM users WHERE username = ?";// use `COUNT(*)` 
$result = $db->prepare($sql); 
$result->execute(array('administrator')); 
echo $result->fetchColumn() ? 'true' : 'false'; 
0
SELECT 1 FROM users WHERE username = 'administrator' LIMIT 1 
0

Mit rowCount() ist nicht unsicher, aber nur unpassend.

Die # 1-Regel, wenn die Arbeit mit Datenbanken ist

immer die genauen Daten wählen Sie benötigen.

mit so wenig Nachbearbeitung wie möglich.

Also, wenn Sie alle Daten für Existenz überprüfen müssen, dann fragen Sie Ihre Datenbank zu überprüfen und dann holen Sie das Ergebnis.

Allerdings haben Sie im Auge behalten, dass es 2 mögliche Szenarien:

  1. Falls Sie tatsächlich überprüfen müssen, wo immer etwas in einer Datenbank vorhanden ist, aber nicht die Daten benötigen, dann ist (Benutzernamen angenommen hat einen eindeutigen Index auf sie):

    $sql = "SELECT 1 FROM users WHERE username = ?"; 
    $result = $db->prepare($sql); 
    $result->execute(array('administrator')); 
    echo $result->fetchColumn() ? 'true' : 'false'; 
    
  2. Aber oft müssen Sie die Daten selbst, wenn sie gefunden werden, geschieht. In diesem Fall Sie nur, dass die Daten auswählen:

    $sql = "SELECT * FROM users WHERE username = ?"; 
    $result = $db->prepare($sql); 
    $result->execute(array('administrator')); 
    $user = $result->fetch(); 
    echo $user ? 'true' : 'false'; 
    

ich darauf bin betont, weil der Wortlaut der anderen Antwort zeigt, dass Sie zwei Abfragen auszuführen haben: man die Existenz zu überprüfen und eine zu bekomme die Daten, was ein Unsinn ist.

Ab der rowCount() Methode - you need it too seldom to talk about.

+0

danke und auch für den Link, es hilft mir viel :) – Theo

Verwandte Themen