Fehler beim Insert in eine mysql Tabelle: Column count doesn't match value count at row 1

  • Joomla 4.4.2

    eigene Komponente

    läuft auf einem öffentlichen Server mit php 8.1.27, in einem geschützten Testbereich

    mysql 8.0.32


    Hallo,


    ich stehe irgendwie auf dem Schlauch. Beim Versuch den Inhalt einer XML-Datei in die Datenbank ein zu pflegen, bekomme ich folgende Fehlermeldung:


    Error inserting data into `#__dealer_vehicles`: Column count doesn't match value count at row 1


    Der Fehler tritt bereits bei der ersten Tabelle auf. Wenn ich in der XML-Datei diese Tabelle herausnehme, habe ich den gleichen Fehler auch bei der nächsten Tabelle.


    Der (meiner Meinung nach) relevante Code sieht so aus:


    Wobei die Query für Fields (columns) und Values so aussieht:


    $query->values:

    Code
    object(Joomla\Database\Query\QueryElement)#756 (3) {  ["name":protected]=>  string(2) "()"  ["elements":protected]=>  array(6) {    [0]=>    int(170218)    [1]=>    int(1400)    [2]=>    int(1)    [3]=>    NULL    [4]=>    float(1600)    [5]=>    float(1904)  }  ["glue":protected]=>  string(3) "),("
    }


    $query->columns:

    Code
    object(Joomla\Database\Query\QueryElement)#757 (3) {  ["name":protected]=>  string(2) "()"  ["elements":protected]=>  array(6) {    [0]=>    string(23) "`dealer_vehicle_number`"    [1]=>    string(16) "`vehicle_number`"    [2]=>    string(23) "`out_is_ready_for_sale`"    [3]=>    string(25) "`out_sales_contract_date`"    [4]=>    string(30) "`out_recommended_retail_price`"    [5]=>    string(16) "`out_sale_price`"  }  ["glue":protected]=>  string(1) ","
    }

    Mir fällt dabei auf, dass 'glue' bei den values "),(", bei den columns aber "," ist.


    Die Datenbanktabelle hat ebenfalls 6 Spalten.


    Ich habe auch schon versucht, die Values mit '$db->quoteName((string)' einzusetzen, das Ergebnis war aber das Gleiche.


    Hat jemand eine Idee, was ich da falsch mache?


    Danke für jede Information.

    Viele Grüße aus der sonnigen Pfalz


    Alexander

  • Code
    ->values(implode(',', $values))

    Mit Arrays für die Values ist das z.B. so gemeint. Seien es 3 columns, die man definiert hat. Dann kann man mehrere Value-Sätze so übergben:

    Code
    $query->values('1,2,3')->values('4,5,6');

    oder

    Code
    $query->values(array('1,2,3', '4,5,6'));

    Beides legt dann also 2 Zeilen bzw. 2 Datensätze an. einen mit 1, 2, 3, den zweiten mit 4, 5, 6.


    Ab Joomla 4/5 dann noch schwerer in die Birne zu bekommen, weil man da bevorzugt mit Binds arbeitet ;)

  • Ich habe das jetzt entsprechend dem Vorschlag von Sieger66

    Zitat

    so lösen können:

    Code
    $result = JFactory::getDbo()->insertObject($tableName, $entry);

    Allerdings dauert das bei 10 Tabellen mit insgesamt ca. 17.000 Zeilen ganz schön lange, fast 4 Minuten.


    Das ist die vollständige Funktion:

    Viele Grüße aus der sonnigen Pfalz


    Alexander