or die() - Was ist damit möglich?

helaukoenig

Erfahrenes Mitglied
Ich habe mal eine grundsätzliche Frage:
Was kann ich eigentlich alles in die Klammern einer or die()-Anweisung reinschreiben? Gut, in Klammer eine Fehlermeldung wie "Verbindung hat nicht geklappt" o.ä. und natürlich mysql-error().
Aber wäre es auch möglich, in das or die() eine alternative Anweisung reinzuschreiben? Also, falls ein INSERT nicht funktioniert weil der Wert für den Primärschlüssel schon vorhanden ist, einfach mit UPDATE ... WHERE id = .. in or die() arbeiten?

Danke im voraus.
 
Du koenntest theoretisch auch eine alternative Anweisung in die() packen, jedoch wird nach die() die Ausfuehrung des Scripts beendet.
Daher waere es wohl eher sinnvoll generell zu ueberpruefen ob eine Funktion false zurueckliefert und dann entsprechend zu handeln. So wird zumindest noch der Rest vom Script ausgefuehrt.
Aber falls nach der alternativen Anweisung abgebrochen werden soll wird wohl die() keine schlechte Wahl sein.
 
Danke für die prompte Antwort. Die Ausführung des Skripts soll wirklich an dieser Stelle abgebrochen werden, von daher wäre dieser Weg schon der kürzeste. Aber der Übersichtlichkeit halber werde ich wohl doch über ein Abfrage vorhandene Einträge überprüfen und dann verzweigen.
 
Du musst ja nicht zwingend die() nach dem or verwenden. Das or ist lediglich eine logische Verknüpfung die von links nach rechts auswertet und die Auswertung beendet, sobald das erste mal auf einer Seite ein "true"-Wert gefunden wurde.

Foglich könntest du anstatt einem die auch einfach direkt wieder die Funktion mysql_query mit einem anderem SQL-Statement ausführen.

Macht aber keinen Sinn, da du ja dann nicht unterscheidest, ob z.B. das insert wegen duplicated keys fehlgeschlagen ist, oder evtl. zwischen aufbau der Verbindung zum MySQL Server und dem ausführen des Queries evtl. die Netzwerkverbindung verloren gegenangen ist und deshalb mysql_query "false" als Rückgabewert liefert. UNd folglich würde auch dein zweiter Versuch eines abgeänderten Queries fehlschlagen.

Nebenbei gibt es bei der INSER-Syntax auch ein "ON DUPLICATE KEYS" (oder ähnlich, einfach mal in der MySQL-Dokumentation nachsehen ;) ).

Man beachte hierzu einfach mal folgendes Beispiel und spiele mit den Rückgabewerten der Funktionen herum :)

PHP:
<?php
function a() {
  echo "Ich bin function a\n";
  return false;
}
function b() {
  echo "ich bin function b\n";
  return true;
}

function c() {
  echo "ich bin function c\n";
  return false;
}

a() or b() or c();
?>
 
Ha, das ist ja noch besser mit ON DUPLICATE KEYS! Das verkürzt das Skript deutlich, weil es mir eine Abfrage und eine anschließende IF-ELSE-Konstruktion und mehrere Klammern vor und hintern mehreren Klammer erspart.
Allerherzlichsten Dank.
 
Zurück