update/insert wie kann ich rausfinden ob ein Eintrag bei "update" gefunden wurde

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • update/insert wie kann ich rausfinden ob ein Eintrag bei "update" gefunden wurde

    Hi hab ein "probem" das mich schon länger stört.... bin gerade wieder
    dabei den Quellcode meiner Seite zu optimieren (und da gibts viel zu tun) ....

    PHP-Code:
    $admin=substr_count($ipadmin$ip);

    if(!
    $admin&&$exec_statistics){

        
    $db=@mysql_query("SELECT id FROM $clickstats WHERE type='$type' && content='$content'");

        if(
    mysql_fetch_row($db)){

            @
    mysql_query ("UPDATE $clickstats SET clicks=clicks+1 , 
                                     lastvisit=
    $time WHERE type='$type' && content='$content'");

        }else{

            @
    mysql_query("INSERT INTO $clickstats (type, content, clicks, lastvisit)
                             VALUES ('
    $type','$content', 1, $time)");

        }

    und zwar wenn ein besucher zB auf ein Bild klickt soll das gezählt werden... so jetzt hab ich da auf jedenfall immer 2 Datenbankoperationen
    ..... es wäre schön wenn ich das auf eine reduzieren könnte, bzw 2 wenn der Eintrag noch nicht vorhanden ist

    in etwa so... (funzt natürlich nicht)
    PHP-Code:
    $admin=substr_count($ipadmin$ip);
    if(!
    $admin&&$exec_statistics){

        if(!@
    mysql_query ("UPDATE $clickstats SET clicks=clicks+1 , 
                       lastvisit=
    $time WHERE type='$type' && content='$content'")){

            @
    mysql_query("INSERT INTO $clickstats (type, content, clicks, lastvisit)
             VALUES ('
    $type','$content', 1, $time)");

        }

    gibts da nen befehl der bei update zurückliefert ob überhaupt ein eintrag gefunden wurde, bzw daß mysgl anweisung
    die gleich sagt "Halt hab dich nicht gefunden tragen wir dich ein!" ?????
    Zuletzt geändert von seekworld; 21.04.2006, 22:34.

  • #2
    mysql_affected_rows()

    btw. mach mal die häßlichen @s aus dem Source raus...

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      danke )))

      die @s die gefallen mir aber... die sind so schön grün ... nein warum sollte ich? soviel ich weiß hat das mit dem errorhandling zu tun ... hat das auch auswirkung auf die performance (wird sicher nen grund haben warum du das sagst..... welchen?)

      Kommentar


      • #4
        hat das auch auswirkung auf die performance
        in wie fern?
        wird sicher nen grund haben warum du das sagst..... welchen?
        stell dir mal vor - irgendwas (eine abfrage) geht schief und du bekommst nichts davon mit.

        Kommentar


        • #5
          Original geschrieben von penizillin
          stell dir mal vor - irgendwas (eine abfrage) geht schief und du bekommst nichts davon mit.
          Ohne @ bekommst du davon genauso viel mit. Da musst du schon mysql_error verwenden.
          hopka.net!

          Kommentar


          • #6
            Original geschrieben von penizillin
            in wie fern?


            stell dir mal vor - irgendwas (eine abfrage) geht schief und du bekommst nichts davon mit.
            1) ob das irgendwelche zusätlichen Rechenoperationen für PHP verursacht... => langsamer (wenn auch nur um ein paar nanosekunden ......

            denke mal daß das "kürzer" ist, weil dann nicht erst geschaut wird ob ein Fehler auftritt...

            2) achso DER Grund....
            ... was kann daran schiefgehen???, außer daß der Datensatz nicht gefunden wurde,... das prüfe ich mit dieser abfrage

            ......$exec_statsistics ist auf nur auf 1, wenn zB das Bild auch gefunden wurde... => alle variablen sind korrekt gefült wenn zu diesen operationen kommt alles ohne Sonderzeichen.... kann also nix schiefgehen ... außer beim server... dann ist das was einmaliges, was ich sowieso nicht mehr ändern könnte . Und "beschweren" tu ich mich auch nicht wenn was schiefgeht, weil ich privat, gratis und ohne Werbeeinblendung gehostet bin ...

            .... wenn hier etwas schiefgehen würde... bekämen auch die Besucher die Fehlermeldung... und das will ich nicht

            ...... wichtige sachen, die die Benutzer mitkriegen müssen , hab ich eh ohne die @ts mit "or die" und 2 abfragen hab ich sogar mit ner mail-funktion versehen ....

            ....... zudem ist meine Seite überschaubar, und ich teste alles auf alle eventualitäten auf localhost (außer auf nen besucheransturm von 10000B/h, den ich sowieso nicht habe )

            ....... wenn ein "Fehler auftritt", dann ist das ein Rechtschreibfehler beim Inhalt... und den krieg ich auch ohne die @ts erst nach nem halben Jahr mit, wenn überhaupt ....

            Kommentar


            • #7
              Es gibt INSERT..... ON DUPLICATE UPDATE ...

              Kommentar


              • #8
                funktioniert nicht: (!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
                PHP-Code:
                    $db=@mysql_query("UPDATE $clickstats SET clicks=clicks+1, lastvisit=$time WHERE type='$type' && content='$content'");
                if(!(
                mysql_affected_rows($db))){
                    
                        @
                mysql_query("INSERT INTO $clickstats (type, content, clicks, lastvisit) VALUES ('$type','$content', 1, $time)");



                funktioniert:
                PHP-Code:
                    $db=@mysql_query("UPDATE $clickstats SET clicks=clicks+1, lastvisit=$time WHERE type='$type' && content='$content'");
                if(!(
                mysql_affected_rows())){
                    
                        @
                mysql_query("INSERT INTO $clickstats (type, content, clicks, lastvisit) VALUES ('$type','$content', 1, $time)");


                .................. ??????????????????????????????????

                der unterschied ist daß ich beim 2tern funktionirenden
                die Ereigniskennung weglasse... dabei wird die in den online-dokus als optional bezeichnet... ????????
                und sicher auch erforderlich wenn man den Wert
                späte braucht.. (OK, man kann ihn auch in ner Variabe speichern).............


                Verwende:
                PHP 4.3.11
                Mysql 4.0.20d
                MyODBC-standard-3.51.9
                Apache 2.0.44
                auf Win XP-Pro SP2




                Original geschrieben von vierteln
                Es gibt INSERT..... ON DUPLICATE UPDATE ...
                Danke )) hast du nen Link für den genauen Syntax?

                Kommentar


                • #9
                  mysql_affected_rows kriegt als optionalen Parameter die Verbindungskennung, also den Rückgabewert von mysql_connect.

                  http://dev.mysql.com/doc/refman/4.1/...duplicate.html (Aber da ist deine MySQL-Version zu alt für.
                  hopka.net!

                  Kommentar


                  • #10
                    Original geschrieben von seekworld
                    hat das auch auswirkung auf die performance (wird sicher nen grund haben warum du das sagst..... welchen?)
                    das hat es, es ist (momentan noch) relativ langsam ... irgendwo geistert ein Patch rum für php, aber ich glaube der ist noch nicht applied ... also wenn lieber gleich error_reporting(0) (und das war jetzt Ironie .... error_reporting(E_ALL) nehmen und dann alles entfernen was ausgeworfen wird!)


                    und wtf. lesen verstehen umsetzen:
                    http://www.php-resource.de/forum/sho...threadid=50454
                    ich hasse Scrollbalken

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      @ Hopka...
                      ja geschnalt... Verbindungskennung, nicht Ereigniskennung .... ... die variable existiert nicht bei mir, bzw schon, nur wird die von der nächstbesten abfrage überschrieben

                      das mit dem Insert on dublicate kann ch dann nicht verwenden... weil ich nicht weiß was mein zukünftiger host verwendet... also lieber ältere Version... mit einer anderen Seite bin ich da mal kräftig eingefahren... wie ich meine Seite hochgeladen hab, hats von Fehlern gehagelt weil die PHP 4 hatten und ich die Seite für PHP5 programmiert hab...

                      Original geschrieben von ghostgambler
                      und wtf. lesen verstehen umsetzen:
                      http://www.php-resource.de/forum/sho...threadid=50454
                      ich hasse Scrollbalken [/B]
                      ich auch......hab ich gelesen, hab ich verstanden, und es passt ja auf den Monitor => umgesetzt .....

                      welche Bildschirmauflösung hast du?
                      Zuletzt geändert von seekworld; 23.04.2006, 11:47.

                      Kommentar


                      • #12
                        Original geschrieben von seekworld
                        ich auch......hab ich gelesen, hab ich verstanden, und es passt ja auf den Monitor => umgesetzt .....

                        welche Bildschirmauflösung hast du?
                        Informatiker sind FAUL! Folglich mag hier niemand eine horizontale Scrollbar nach rechts bewegen. Achtet also beim Posten darauf, dass ihr bei "breitem" Quelltext entsprechende Umbrüche in den Text einfügt, so dass euer Posting bei einer Auflösung von 1024 Pixeln (Breite) ohne Hindernisse zu lesen ist.

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar

                        Lädt...
                        X