Problem mit $mysqli->multi_query

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

  • Problem mit $mysqli->multi_query

    Nabend,

    ich habe ernsthafte Probleme mit einem Skript. Das Skript aktualisiert die Warenbestände in unserem Onlineshop und sieht wie folgt aus.

    PHP-Code:
    $mysqli = new mysqli("XXX","XXX","XXX","XXX");

    // Die verbindung testen
    if(mysqli_connect_errno()) {
    echo 
    "Ein fehler ist aufgetreten: "mysqli_connect_error(), "\n";
    exit();
    }

    $Zeilen 1;
    $Dateizeiger fopen("as400/bestand.csv""r");

    while((
    $Daten fgetcsv($Dateizeiger1000";")) !== FALSE)
    {
        
    $count++;
        
    $seqcount++;
        
    $average_quantity $Daten[3] / 28 5;
        
    $aendern.="UPDATE `xt_products` Set 
                        `_quantity_2` = '
    $Daten[2]',
                        `_average_quantity_2` = '
    $average_quantity'
                    WHERE 
                        `products_model` = '
    $Daten[1]' AND
                        `dispocode` != 'DISJ';"
    ;
        if(
    $seqcount>100) {            
            if(
    $mysqli->multi_query($aendern)) {
                echo 
    "Schreiben der Datensätze erfolgreich."
                }
            else { 
                echo 
    "Fehler beim Schreiben der Datensätze: ".$mysqli->error."<br>";
                }
            
    $seqcount 0;
            
    $aendern='';
            }
            
    }
    $mysqli->close();
    echo 
    $count." Lagermengen eingelesen und geprüft.";
    fclose($Dateizeiger); 
    Ich versuche mit multi_query mehrere UPDATES auf einmal in die Datenbank zu schreiben. Das klappt aber nur beim ersten mal, danach kommen nur "Out of sync" errors. Wenn ich nach jedem Eintrag die Verbindung schließe und neu aufbaue funktioniert es zwar, aber ich bin rucki zucki am limit meiner MySQL Connections und es funktioniert erstmal gar nichts mehr (inkl. unseres Shops).

    Zur Info:
    Das Skript schreibt rund 68000 DS. Wenn ich einzelne $mysqli->query aufrufe funktioniert alles problemlos, es reicht auch, wenn ich die Datenbank erst nach der Schleife schließe, aber der Prozess dauert mehrere Stunden.

    Kann mir da jemand helfen?

    Vielen Dank und schönen Abend,

    Baskosehund

  • #2
    Trenne dein Query-String vom DatenArray und baue ihn so auf:

    PHP-Code:
       $aendern.="UPDATE `xt_products` Set 
                        `_quantity_2` = '"
    .$Daten[2]."',
                        `_average_quantity_2` = '
    $average_quantity'
                    WHERE 
                        `products_model` = '"
    .$Daten[1]."' AND
                        `dispocode` != 'DISJ';"

    es könnte daran liegen.

    Kommentar


    • #3
      Hallo,

      danke für die Antwort. Leider liegt es nicht daran. Der eigentliche SQL Befehl kann ja so ausgeführt werden.

      Nur ab dem zweiten durchlauf der Schleife liefert $mysqli->multi_query: Fehler beim Schreiben der Datensätze: Commands out of sync; you can't run this command now.

      Ich habe den Fehler natürlich auch schon im Handbuch nachgeschlagen, allerdings habe ich keine Ahnung, was erwartet wird, damit ich einen neuen Query starten kann...

      Kommentar


      • #4
        Habe es inzwischen hinbekommen. Es fehlte noch
        PHP-Code:
        do{
          if(
        $result $mysqli->store_result()){
            while(
        $data $result->fetch_row());
            
        $result->close();
          }
        } while(
        $mysqli->next_result()); 
        Die "Ergebnisse" müssen wohl erst durchlaufen werden bevor die nächste Abfrage kommen kann.

        Viel schneller ist das ganze allerdings bei mir nicht. Na ja vielleicht weiss ich morgen mehr dazu wenn das Skript heute Nacht durchläuft.

        Hat jemand auf Anhieb eine Idee warum das so eeewwwig dauert? Die Skripte sprengen meine Cronjobmöglichkeiten bei Domainfactory...

        Kommentar

        Lädt...
        X