Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL: INSERT und UPDATE query zusammenfassen

Einklappen

Neue Werbung 2019

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

  • MySQL: INSERT und UPDATE query zusammenfassen

    Hallo,

    Ist es möglich diese 2 query zusammenzufassen?

    PHP-Code:
    $db->query("INSERT INTO Shop_Cart (Session, ArtikelNr, Anzahl, Addtime) VALUES('".session_id()."', '".$produkt['artikelnr']."' , '".$cart['max']."', '".time()."')");
    $db->query("UPDATE Shop_Artikel SET Lagerbestand=Lagerbestand-".$cart['max'].", wkadd=wkadd+1 WHERE ArtikelNr = '".$produkt['artikelnr']."'"); 
    hab es schon als multi query probiert aber er gibt immer nur fehlermeldungen in der syntax aus oder er meldet einen Fehler bei einem später kommenden SELECT query


  • #2
    Zitat von QPG Beitrag anzeigen
    hab es schon als multi query probiert aber er gibt immer nur fehlermeldungen in der syntax aus oder er meldet einen Fehler bei einem später kommenden SELECT query
    Schon mal gut, dass du uns deinen Versuch mit multi_query nicht zeigst und uns mit den Fehlermeldungen verschonst. Da brauchen wir wenigstens nichts korrigieren.
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Entschuldigung, hier der soweit funktionierende code:
      PHP-Code:
      $query "UPDATE Shop_Artikel SET Lagerbestand=Lagerbestand+".$cart['anzahl']." WHERE ArtikelNr = '".$produkt['artikelnr']."';";
      $query .= "DELETE FROM Shop_Cart WHERE ArtikelNr = '".$produkt['artikelnr']."' AND Session = '".session_id()."';";
      $db->multi_query($query); 
      Fatal error: Call to a member function fetch_object() on a non-object ***** on line 48
      PHP-Code:
      47$query $db->query("SELECT c.ArtikelNr, c.Anzahl, c.Session, a.ArtikelNr, a.Artikel, a.Preis, a.Pfand, a.Lagerbestand, a.Beschreibung, a.Aktionspreis, a.FSK, a.MaxPP, a.Vol FROM Shop_Cart c JOIN Shop_Artikel a ON a.ArtikelNr = c.ArtikelNr AND c.Session = '".session_id()."'");    
      48: while($cart $query->fetch_object()){ 
      der fehler tritt nur auf sobald mit multi_query gearbeitet wird

      Kommentar


      • #4
        Es ist schon immer ratsam gewesen, die Datenbank nach einem Query zu fragen, ob es eventuell einen Fehler gegeben hat und wenn ja, welchen. Deshalb gibt es ja z.B. die Funktionen mysqli_errno und mysqli_error. Siehe auch http://php.net/manual/en/mysqli.error.php
        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

        Kommentar


        • #5
          das ist verbaut:
          PHP-Code:
          printf("<br>Errormessage: %s\n"$db->error);
          printf("<br>Errorcode: %d\n"$db->errno);
          exit(); 
          Errormessage:
          Errorcode: 0

          Kommentar


          • #6
            Kannst du bitte größere Code-Ausschnitte posten? Sonst fällts schwerer sich ein Bild vom Ganzen zu machen.

            Hast du deine Query für multiquery() schonmal ausgeben lassen und manuell auf die Datenbank gefeuert?
            Relax, you're doing fine.
            RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

            Kommentar


            • #7
              test.php
              PHP-Code:
              <?php
              require_once ('data/settings.php');     /// Einstellungen
              require_once ($settings['inc_dir'].'/tpl.class.inc.php');    /// CLASS Templates

              $db = @new mysqli($settings['db_host'], $settings['db_user'], $settings['db_pw'], $settings['db_db']);

              @
              $db->query("SET NAMES 'utf8'");

              if (
              $db->connect_error) {
                  
              printf("<br>Connect failed: %s\n"$db->connect_error);
              }
              if (
              $db->connect_errno) {
                  
              printf("<br>Connect Error: %d\n"$db->connect_errno);
              }

              $template = new tpl();

              $produkt['artikelnr'] = '1';
              $cart['max'] = '5';

              $query "INSERT INTO Shop_Cart (Session, ArtikelNr, Anzahl, Addtime) VALUES('".session_id()."', '".$produkt['artikelnr']."' , '".$cart['max']."', '".time()."');";
              $query .= "UPDATE Shop_Artikel SET Lagerbestand=Lagerbestand-".$cart['max'].", wkadd=wkadd+1 WHERE ArtikelNr = '".$produkt['artikelnr']."';";
              $db->multi_query($query);
                          
                          
              if(
              $db->error){
                  
              printf("<br>Errormessage: %s\n"$db->error);
                  
              printf("<br>Errorcode: %d\n"$db->errno);
                  exit();
              }

              $template->page("header");
              $template->page("navigation");
              $template->page("home");
              $template->page("footer");
              ?>

              $template->page("header");
              PHP-Code:
              <!DOCTYPE HTML>
              <html>
              <head>
                  <meta charset="UTF-8">
                  <title><?=$title?></title>
              </head>
              <body>
              <?php
                  $stk 
              "0";

                  
              $query $db->query("SELECT c.ArtikelNr, c.Anzahl, c.Session, a.ArtikelNr, a.Artikel, a.Preis, a.Pfand, a.Lagerbestand, a.Beschreibung, a.Aktionspreis, a.FSK, a.MaxPP, a.Vol FROM Shop_Cart c JOIN Shop_Artikel a ON a.ArtikelNr = c.ArtikelNr AND c.Session = '".session_id()."'");    
                  while(
              $cart $query->fetch_object()){ // HIER TRITT DER FEHLER AUF
                      
              $stk $stk $cart->Anzahl;
                  }
              ?>

              Kommentar


              • #8
                Hab jetzt etwas weiter probiert:

                wen ich nach dem
                PHP-Code:
                $db->multi_query 
                die verbindung trenne und neu aufbau:
                PHP-Code:
                $db->close();
                $db = @new mysqli(... 
                funktioniert es.


                EDIT:
                hab jetzt ein
                PHP-Code:
                $db->next_result(); 
                anstatt die verbindung zu trennen eingeügt, jetzt funktioniert es. Ist das die korrekte lösung?

                Kommentar


                • #9
                  Also tritt die Fehlermeldung gar nicht im Zusammenhang mit der multiquery auf, sondern in deiner View.
                  Dann solltest du da auch mal nach Fehlermeldungen der Datenbank abfragen.

                  +
                  Warum führst du überhaupt Queries in der View durch? Da du dein Projekt wohl schon strukturiert hast, solltest du es auch ordentlich machen und die Daten vorher abfragen und dann in die View geben.
                  Schleife um einen einzelnes Resultset zu fetchen? Nutze lieber ein if-Konstrukt, das ist semantisch passender. Du willst ja nicht iterieren sondern nur ein Element prüfen.
                  Warum überhaupt die Queries zusammen abschicken. Unnötig kompliziert.

                  WICHTG: Hör mit den @'s auf! Du willst die Fehlermeldungen nicht unterdrücken sondern behandeln!


                  Edit:
                  EDIT:
                  hab jetzt ein
                  PHP-Code:
                  $db->next_result();
                  anstatt die verbindung zu trennen eingeügt, jetzt funktioniert es. Ist das die korrekte lösung?
                  Wie schon gesagt, zusammenhangslos lässt sich schlecht antworten.
                  Aber ja, http://php.net/manual/en/mysqli.multi-query.php der 1. Kommentar behandelt diese Problematik.
                  Relax, you're doing fine.
                  RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                  Kommentar

                  Lädt...
                  X