saftmeister
Nutze den Saft!
sag mal Saftmeister, kann es sein das du dich irrst?
Grundsätzlich ist das möglich ;-) In diesem speziellen Fall aber nicht. Erklärung folgt.
das holt ja pro Durchlauf 1 Datensatz aus der DB, wenn $row jetzt innerhalb der Bedingung weiter Verarbeitet wird:
PHP:while ($row = $result->fetch_assoc()) { echo $row['title']; }
ist $row['title'] beim Fehlschlag der Query nicht deklariert und es kommt zu Notivce-Meldungen.
Wenn der Query fehlschlägt, ist $result null, das bedeutet, du musst dein $result sowieso prüfen. Solltest du ohne zu prüfen auf $result zugreifen, kommt es zu einer ganz anderen Meldung nämlich einem Fatal Error (null kann nicht als Objekt verwendet werden, und hat auch keine Methode fetch_assoc()).
wenn du zuerst die Bedingung sicherstellst:
PHP:$rows = array (); $row = $result->fetch_assoc(); while ($row) { $rows[] = $row; $row = $result->fetch_assoc() }
Ist das gleiche in grün nur mit mehr Code.
Ist alles, was sich im Array $rows befindet, deklariert und kann genutzt werden,- sollte die Bedingung nicht erfüllt sein, kannst du das leicht mit
Warum sollte ich zwei mal über die gleichen Ergebnisse loopen. Ich wiederhole mich noch einmal: Was du machst, ist das gleiche nur mit mehr Code! Da bringt es auch nichts, die Ergebnisse noch mal in ein anderes Speicher-Objekt zu kopieren.
PHP:$count = count ($rows);
Wenn schon so, warum dann nicht mysqli_result::$num_rows verwenden?
feststellen und eine Anweisung einbauen, die ein Hinweis auf ein leeres Ergebnis bringt, ansonsten mit foreach() abarbeiten.
Das ist zwar etwas mehr an Code und eventuell etwas Mühsamer als die gewohnte Art, aber der Code wird dadurch (meiner Meinung nach) viel sauberer
Noch mehr Schleifen?
Noch mal langsam fürs Verständnis:
- Dir geht es also darum, das der Query fehlschlagen könnte?
Dann ist weder deine Variante noch meine adäquat, denn es fehlt eine Prüfung auf $result != null.
- Dir geht es darum, das der Query nicht fehlschlägt aber keine Ergebnisse liefert?
Dann ist meine Variante genauso gut wie deine.
Dein Codebeispiel oben ist aus dem Zusammenhang gerissen. Ich hab keine Ahnung, wo $rows her kommt, wie es befüllt wird und wo genau der Zusammenhang mit dem Beispiel des Thread-Erstellers zu suchen ist.
Fakt ist das
PHP:
while($variable = $anderer_wert)
eine völlig legitime Art und Weise ist eine Bedingung für den Abbruch einer while-Schleife festzulegen.
Das kommt daher, das PHP - wie viele andere Sprachen auch, von rechts nach links arbeiten. Es wird also zuerst $anderer_wert zurück gegegeben und damit $variable mit einem Wert versorgt und anschließend gibt $variable auch noch was zurück, nämlich seinen Wert an die Bedingung der while-Schleife.
Zuletzt bearbeitet: