kostenloser Webspace werbefrei: lima-city


MySQL Datenbankeintrag erstellen wenn nicht vorhanden.

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    saalko

    saalko hat kostenlosen Webspace.

    Ich wollte mal hier fragen ob die Schreibweise richtig ist. (solange ich nicht auf die Datenbank zugreifen kann, kann ich nicht schauen ob es auch so klappt.)

    Ich will in der Datenbank "beispiel" eine reihe von Artikeln auflisten. Diese sollen aber mit + - Zahlen verändert werden. Lösung: (Sollte klappen. das 2. ist erst meine Frage)

    mysql_query("
    	UPDATE beispiel
    		SET anzahl = anzahl + '".$anzahl."'
    	WHERE artikel ='".$artikel."' LIMIT 1
    ") OR die(mysql_error());


    Wenn der Artikel nicht in der Datenbank vorhanden ist, soll er den Artikel in der Datenbank hinzufügen, so das beim nächsten mal es geupdatet wird. Stimmt der Code? Oder ist ne andere lösung besser.

    mysql_query("
    	UPDATE beispiel
    		SET anzahl = anzahl + '".$anzahl."'
    	WHERE artikel ='".$artikel."' LIMIT 1
    ")
    
    OR
    
    mysql_query("INSERT INTO beispiel
    	    (artikel,anzahl)
    	    VALUES (
    	    '".$artikel."',
    	    '".$anzahl."'
    	    );") OR die(mysql_error());
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. c****s

    Das in PHP oft gelesene "or die ()" ist kein sauberes Exceptionhandling und sollte wirklich nur für unvorhergesehene Fälle genutzt werden.
    http://www.phpfreaks.com/blog/or-die-must-die

    Mach doch einfach:

    if ( ! mysql_query ("UPDATE blablubu") ) mysql_query ("INSERT blablub");


    Beitrag zuletzt geändert: 24.8.2009 17:54:23 von census
  4. Autor dieses Themas

    saalko

    saalko hat kostenlosen Webspace.

    naja OK. Werde es wohl für den öffentlichen Teil beachten. Ist das aber nicht, eine Seite zum PhP Befehl die().

    Es geht mir ja um den MySQL Teil. mit dem OR. ich will ja dann eine andere Funktion ausführen, wenn die Updatefunktion nicht klappt.

    In dem Bereich in dem ich es anwenden will, ist es eh nur für einen engeren Kreis gedacht.

    Also es ging mir um das OR. funktioniert das so? Oder ist es besser, es per PhP statt mit MySQL zu lösen. (Es ist ja nur ein OR, anstatt einer if() Funktion.)
  5. c****s

    Das Problem mit "or die()", ist, dass es ein ganz hässlicher Seiteneffekt der "Faulen Auswertung" (lazy evaluation) der logischen Operatoren in PHP ist.

    Der Ausdruck A or B, ist schlicht und ergreifend ein Statement, dass true liefert, sobald A oder B oder beide wahr sind. Da PHP lazy auswertet und von links nach rechts, wird zuerst A ausgeführt, danach geprüft, ob A wahr oder falsch ist. Falls A wahr ist, wird B gar nicht mehr angekuckt, da A or B ja sowieso schon nach true geht. Ist A allerdings falsch, dann wird B ausgewertet, um A or B bestimmen zu können.

    Es ist nirgendswo in der Sprachdefinition festgeschrieben, dass PHP left-to-right lazy-evaluation macht. Das heißt, es ist ein glücklicher Zufall, dass "or die ()" oder "mysql_query ($a) or mysql_query ($b);" sich so verhält, wie du es erwartest. Es ist unsauber programmiert, es ist Ausnutzen und Vertrauen auf Sideeffects und 90% der Leute, die dauernd "or die()" nutzen, wissen nicht einmal wieso es funktioniert.

    Natürlich kannst du "or" für eine Bedingung nutzen. Feel free. Sei dir nur bewusst was du tust und dass es ein glücklicher Zufall ist, dass es funktioniert.

    Dann aber bitte für einen Code-Style entscheiden und überhaupt kein "if" im Sourcecode benutzen. Also nicht schreiben:
    if ($age < 18) echo "You are too young.";

    sondern
    $age >= 18 || print ("You are too young.");


    EDIT:
    saalko schrieb:
    Also es ging mir um das OR. funktioniert das so? Oder ist es besser, es per PhP statt mit MySQL zu lösen. (Es ist ja nur ein OR, anstatt einer if() Funktion.)

    Ja es müsste mit dem OR funktionieren. Du löst es eh schon mit PHP und nicht mit MySQL. Das "or" ist PHP und nicht MySQL. Wäre es mysql, stünde es in der query.

    Beitrag zuletzt geändert: 24.8.2009 23:14:12 von census
  6. Autor dieses Themas

    saalko

    saalko hat kostenlosen Webspace.

    Ah OK jetzt habe ich es verstanden, was du meintest. Danke. denke werde aber bei der OR Variante bleiben. Denke nicht, dass die OR Auswertung geändert wird. Eine Auswertung beider wäre ja nur bei einer XOR Abfrage interessant. Kann man in PhP eigentlich leicht eine XOR Abfrage realisieren? OH OK sehe gerade diesen Operator gibt es ja auch. Denke, dann werde ich doch bei OR bleiben.

    Wieder was gelernt. dann kann ich ja wirklich ein paar if Abfragen rausschmeißen. (Bin in einer Datei mittlerweile in der 7. Unterfunktion drin.) Ähm war das in PhP auch begrent? ich kenne das aus Excel, da war es glaube ich, das man maximal 7 "Wenn" Funktionen ineinander ausführen konnte.

    (keine Angst sind nicht 7 if Funktionen. Obwohl. es sind hauptsächlich for und foreach Funktionen.)
  7. c****s

    saalko schrieb:
    Ah OK jetzt habe ich es verstanden, was du meintest. Danke. denke werde aber bei der OR Variante bleiben. Denke nicht, dass die OR Auswertung geändert wird. Eine Auswertung beider wäre ja nur bei einer XOR Abfrage interessant. Kann man in PhP eigentlich leicht eine XOR Abfrage realisieren? OH OK sehe gerade diesen Operator gibt es ja auch. Denke, dann werde ich doch bei OR bleiben.

    Wieder was gelernt. dann kann ich ja wirklich ein paar if Abfragen rausschmeißen. (Bin in einer Datei mittlerweile in der 7. Unterfunktion drin.) Ähm war das in PhP auch begrent? ich kenne das aus Excel, da war es glaube ich, das man maximal 7 "Wenn" Funktionen ineinander ausführen konnte.

    (keine Angst sind nicht 7 if Funktionen. Obwohl. es sind hauptsächlich for und foreach Funktionen.)


    Schade, dass mit dem "Verwende kein if sondern or" war eigentlich ironisch gewesen.
    Nur ein paar Punkte zur Info:
    "xor" ist keine Abfrage, sondern ein logischer oder binärer Operator.
    "if" ist keine Abfrage, sondern ein Kontrollstatement.
    PhP kennt keine Begrenzung der Scopetiefe.
    "if" ist keine Funktion.
    "for" und "foreach" sind auch keine Funktionen, sondern ebenfalls Controlstatement.
    "Control statement" heißen alle syntaktischen Elemente, die den Fluss der Programmausführung steuern (program flow control).
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!