Vermutlich ist das bei den Daten aus der Datenbank immer true, wenn auch null oder Leerstring o. ä.
Genau das ist es, gesetzt ja, aber kein Wert vorhanden. Ich würde es mal mit empty oder is_null versuchen.
Und noch ein Hinweis zu dem Script aus #1:
Beim Einsatz von SQL-Datenbanken sollte das Abrufen aller Spalten eines Datensatzes per SELECT * vermieden werden. Stattdessen sollten die gewünschten Spaltennamen explizit aufgelistet werden (SELECT col1, col2 FROM …). Einige Vorteile:
Häufig werden in einer Abfrage nicht alle Spalten benötigt, die aktuell existieren oder in Zukunft existieren könnten, sodass unnötige Daten übertragen werden.
Bei expliziter Angabe der gewünschten Spalten können Datenbanksysteme unter Umständen Indizes zur Beantwortung von Abfragen nutzen.
Eine Auflistung der Spaltennamen macht den Code verständlicher, da die Tabellenstruktur nicht erst im Datenbankschema nachgelesen werden muss.
Bei Änderungen am Datenbankschema (etwa bei Entfernung oder Umbenennung einer Spalte) schlägt eine Query, die kein SELECT * nutzt, sofort fehl. Das ist hilfreich, da so keine Stelle im Code übersehen werden kann, an der wahrscheinlich auch die PHP-Datenstrukturen an das neue Schema angepasst werden müssen.
Und dieser echo-Marathon ist auch überflüssig, das bekommt man bei dieser Ausgabe mit einer Zeile hin:
PHP:
echo implode(" - ", $row) . "<hr>";