Bug in MysqliDriver.php?

  • Hallo zusammen,


    ich habe evtl. einen Bug im MysqliDriver.php gefunden, bin mir aber nicht sicher, könnte auch ein Fehler meinerseits sein. In Joomla 3 hat derselbe Code aber funktioniert. Version ist Alpha12. Folgendes Verhalten:


    - Ich habe ein Formular mit teilweise optionalen, daher leeren Werten, siehe Screenshot. Rechts sieht man mein Table-Objekt $object mit den drei leeren Werten "amount_..." rot eingerahmt. Ich befinde mich in MysqliDriver.php, Funktion insertObject.


    - Nun laufe ich durch die foreach-Schleife bis zur Auswertung des Wertes amount_small. Folgender Code ist das:

    - Am Ende der Schleife, bei // Prepare and sanitize ..., werden alle Werte mit Hochkommata umgeben. Auch leere Werte, aus denen wird "''", siehe folgenden Screenshot:



    - Wird nun die Query ausgeführt, kommt folgende Fehlermeldung von der Datenbank:


    Incorrect integer value: '' for column 'amount_small' at row 1


    Hier noch meine Datenbankdefinition:


    Ist dort ggf. etwas falsch eingestellt?


    Vielen Dank für Eure Hinweise!

  • Schätze mal, die Antwort wirst du in diesen Zeilen der MySliDriver.php finden (im Konstruktor).

    Du übergibst einen Leer-String an ein Integer-Feld. Bin nicht ganz sicher, ob man dann 0, '0' oder NULL übergibt.


    Gibt ja noch mehr "Fiesheiten" in dieser Art, die daher rühren, dass man die Default-Einstellungen von MySQL zusätzlich für Joomla erzwingt (seit Joomla 4).

  • Wie sieht denn der Code aus, mit dem du die Daten in die Tabelle einträgst? Bzw. sind da die amounts im array/Objekt enthalten und mit welchen Werten? null, 0, '0' oder ''?


    Edit: Ok, hab den Screenshot kapiert. Du übergibst einen leeren String als amount. Wenn da nichts eingetragen ist, würde ich beim Erstellen von $object dieses Feld gar nicht hinzufügen, dann sollte eigentlich der in der Tabelle definierte Standardwert genommen werden. Oder du setzt es explizit auf 0.

    In Joomla! 4 wird meines Wissens der MySQL-Modus geändert. Bei J!3 wurde so ziemlich alles ignoriert, womit MySQL noch irgendwie klarkommt. Das hat zu unschönen Datenbankstrukturen und -abfragen geführt, weshalb jetzt der Modus etwas strikter gesetzt wird und man das alles schön macht. Ich würde daher davon abraten, den Modus händisch umzustellen, nur damit die eigenen Queries wieder funktionieren, sondern lieber diese so umbauen, dass sie sauber sind.

  • Danke, Harmageddon, ich override jetzt die validate-Funktion in meiner Model-Klasse wie folgt und es funktioniert nun wunderbar:


    Danke für den Hinweis!