PHP: Wieso wird kein Ergebnis gefunden?
Hey Leute, ich habe folgendes Problem. Ich möchte aus einer Datenbank den Punkt "points" laden. Dafür verwende ich den unten angegebenen Code.
$stmt = $mysql->prepare("SELECT points FROM accounts WHERE username = :user");
$stmt->bindParam(":user", $user);
$stmt->execute();
$count = $stmt->rowCount();
$row = $stmt->fetch();
$userpoint = $row["points"];
echo "--[Ergebnisse gefunden: " . $count . "] ";
Jedoch findet kein Ergebnis ($count = 0). Über andere echo-Befehle weiß ich, dass $user einen Wert hat, dieser ist auch in der Datenbank zu finden. Auch die Tabelle accounts gibt es, da ich in einem späteren Abschnitt die Punkte in dieser Tabelle erhöhen möchte (und halt dann nur die neuen Punkte eingetragen werden, da $userpoint keinen Wert hat. Weiß jemand wo der Fehler liegt?
2 Antworten
Verlasse dich nicht unbedingt auf die Rückgabe von rowCount. Lies dazu die Beschreibung in der Dokumentation:
PDOStatement::rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement executed by the corresponding PDOStatement object.
If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications.
Prüfe zunächst, was in $userpoint steht und bei Bedarf ebenso, welchen Inhalt $row hält.
print $userpoint;
print_r($row);
Wenn du nicht die erwarteten Daten findest, dürfte das darauf hindeuten, dass dein SQL Query doch falsch ist. Feuere ihn einmal via phpMyAdmin oder Konsole gegen die Datenbank und schau, was zurückkommt.
Um die Anzahl an Ergebnissen zu ermitteln, solltest du entweder alle Daten aus dem ResultSet holen oder, falls dich absolut nur die Anzahl an Einträgen interessiert, eine SQL-Abfrage mit COUNT durchführen (ein entsprechendes Beispiel findest du auch in der PHP-Dokumentation zu rowCount).
Du musst im SQL Statement das :user unter Anführungszeichen ( ' ) setzen sonst passt der SQL Syntax nicht