Bademeister: scheitere an der benutzung von 'mysql_num_rows'

Beitrag lesen

Hi $name,

Die Klammern kamen mir auch spanisch vor, hab sie aber nicht direkt als Ursache vermutet. Es ist jedoch tatsächlich so, dass durch die Klammern das Ergebnis des Ausdrucks nach boolean umgewandelt wird. Lässt man die Klammern weg bekommt man das gewünschte Ergebnis: eine Ressourcenkennung.

Das Ergebnis eines "or"-Ausdrucks ist immer boolean, da wird nix umgewandelt. Nur hat eben "=" einen hoeren Rang als "or", d.h. wenn Du die Klammern weglaesst, also

$result = $a or $b;

dann wird quasi
($result = $a) or $b;

ausgefuehrt, und die Zuweisung an $result hat mit dem Ergebnis von "or" nix zu tun.

Etwas merkwürdig ist die Konstruktion noch aus einem anderen Grund: die Funktion die() hat keinen Rückgabewert und ist somit kein Ausdruck. "or" will aber zwei Ausdrücke auswerten.

Nein, das will es nicht in jedem Fall. Wenn das Ergebnis bereits durch Auswertung eines Operanden feststeht, dann wird der zweite nicht mehr ausgewertet. Wenn bei einem or der erste Teilausdruck bereits true ergeben hat, dann ändert der zweite am Ergebnis nichts mehr. Das gleiche gilt für and, da aber für false. Der Begriff dazu lautet Kurzschlussverfahren.

Ok, ich empfinde es zwar etwas als Vergewaltigung des logischen Operators "or", ihn als "tu dies oder tu das"-Statement zu benutzen, aber da gibts unterschiedliche Meinungen, das stimmt. So eine
mysql_connect(....) or die();
Konstruktion sieht man ja oefters mal sogar in Buechern. Ich wuerd das nicht machen, erstens aus obigen Gruenden, und zweitens, wie Du unten schon beschrieben hast, weil ein Fehler in der Datenbankverbindung kein Grund fuer ein Skript ist, gleich bedingungslosen Selbtmord zu begehen, anstatt das zu einem vernuenftigen Ende zu kommen.

Aber ich sehe ein, meine Bermerkung zur "Aesthetik" war nicht mehr als eine persoenliche Meinungsaeusserung. Wenn man das richtig verwendet, dann gehen solche "or"-Konstruktionen technisch natuerlich. Aber man muss halt wissen, was man tut, wie das urspruengliche Problem dieses Threads zeigt.

Viele Gruesse
der Bademeister