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:
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';
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.
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
@kamalpal die Anzahl der Zeilen zu erhalten und die Existenz zu überprüfen sind zwei verschiedene Aufgaben. –
@ YourCommonSense stimmte zu, aber der Ansatz wäre der gleiche. –