Contao-Camp 2024
Ergebnis 1 bis 15 von 15

Thema: Strict Modus Mysql deaktivieren

  1. #1
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    414

    Standard Strict Modus Mysql deaktivieren

    Guten Tag,

    heute morgen wurde bei unseren Datenbanken der Strict Modus aktiviert. Dadurch funktionieren einige eigene Module nicht mehr.

    Wie kann ich diesen genau wieder in den Contao Einstellungen (config.yml?) zumindest zwischenzeitlich deaktivieren.

    birgt das deaktivieren gefahren auf Datenverlust?

    Vorher war der Strict Modus ebenfalls nicht deaktiviert - hat sich hier etwas in den letzten Tagen/Wochen usw geändert oder würde nach der deaktivierung das ganze genau so wie vorher laufen?

    PS:
    Das Problem sind Text Not Null Felder bzw evtl auch blob felder. Wie kann ich diesen Feldern einen default Wert zuweisen?
    Geändert von Nacht69 (25.08.2021 um 13:04 Uhr)

  2. #2
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    wieso kommt das überhaupt bei 4.9, das hat mich gestern auch gewundert. dachte das wäre ab 4.12 ?
    Liebe Grüße
    WebRoxx


  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Zitat Zitat von WebRoxx Beitrag anzeigen
    wieso kommt das überhaupt bei 4.9, das hat mich gestern auch gewundert. dachte das wäre ab 4.12 ?
    Die Contao Version hat nichts damit zu tun. Contao hat keinen Einfluss auf die (Default) Konfiguration des eingesetzten Datenbankservers.
    » sponsor me via GitHub or PayPal or Revolut

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    @Nacht69 du könntest den umgekehrten, nicht empfohlenen Weg gehen und den SQL_MODE explizit für deine Datenbank Verbindung setzen. Aber ich würde an deiner Stelle lieber die betroffenen Stellen beheben (lassen).
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    414

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    @Nacht69 du könntest den umgekehrten, nicht empfohlenen Weg gehen und den SQL_MODE explizit für deine Datenbank Verbindung setzen. Aber ich würde an deiner Stelle lieber die betroffenen Stellen beheben (lassen).
    Ja scheint die bessere Lösung zu sein. Die Fehleranzahl hällt sich auch in Grenzen. Nur ein Problem schaffe ich nicht zu lösen.

    Ein Feld in das Preise eingetragen werden sollen hat in der DCA folgendes:

    Code:
    	'sql'                     => "double(10,2) NULL"
    Es müssen jedoch auch leere Werte eingetragen werden können. (da der Preis 0.0 nicht richtig wäre)

    Gibt es irgendeinen Weg dies zu erlauben?

    Also dass kein Fehler ausgeworfen wird wenn für das feld '' eingetragen wird?

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Du kannst nur Zahlen oder NULL eintragen. Ein leerer String geht nicht.
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    414

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du kannst nur Zahlen oder NULL eintragen. Ein leerer String geht nicht.
    und zumindest einen weg das per DCA zu regeln gibt es auch nicht? Also wenn ein leerer String kommt, dass er NULL einträgt.

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Das sollte der DataContainer automatisch machen.
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    414

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das sollte der DataContainer automatisch machen.
    bekomme diese Fehlermeldung.

    Code:
    !-- Error: Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect double value: '' for column `yyy`.`tl_bb_yy`.`price_offen_1` at row 1 in /srv/www/yyy/public/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:132
    invalid datetime format ist auch komisch :/

  10. #10
    Contao-Nutzer
    Registriert seit
    26.10.2012.
    Beiträge
    89
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Nacht69 Beitrag anzeigen
    Ein Feld in das Preise eingetragen werden sollen hat in der DCA folgendes:

    Code:
    	'sql'                     => "double(10,2) NULL"
    Es müssen jedoch auch leere Werte eingetragen werden können. (da der Preis 0.0 nicht richtig wäre)
    Wenn die Datenbank nicht im Strict-Mode läuft wird ein Leerstring von der Datenbank in 0.00 umgewandelt (Ohne Fehlermeldung).

    Genau an diesem Beispiel lässt sich auch erkennen warum der Strict-Mode so wichtig ist.

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Zitat Zitat von Nacht69 Beitrag anzeigen
    bekomme diese Fehlermeldung.

    Code:
    !-- Error: Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect double value: '' for column `yyy`.`tl_bb_yy`.`price_offen_1` at row 1 in /srv/www/yyy/public/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:132
    invalid datetime format ist auch komisch :/
    Poste mal den kompletten Stack Trace und die DCA Definition für tl_bb_yy
    » sponsor me via GitHub or PayPal or Revolut

  12. #12
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    414

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Poste mal den kompletten Stack Trace und die DCA Definition für tl_bb_yy
    eintragen läuft über ajax somit krieg ich nur das result per console.log

    Das vor dem Fehler sind alle Felder und nach dem br alle Values

    Code:
    published,name,shortdescription,main_category,price_offen_1,menge_offen_1,einheit_offen_1,price_flasche_1,menge_flasche_1,einheit_flasche_1,hersteller,jahrgang,anbaugebiet_wein<br>'1','test','','Erfrischungsgetränk','','','cl','','','cl','','',''<!-- Error: Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect double value: '' for column `xxx_1`.`tl_bb_getraenke`.`price_offen_1` at row 1 in /srv/www/xxx/public/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:132
    Stack trace:
    #0 /srv/www/xxx/public/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php(132): PDO-&gt;query('INSERT INTO tl_...')
    #1 /srv/www/xxx/public/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOQueryImplementation.php(36): Doctrine\DBAL\Driver\PDOConnection-&gt;doQuery('INSERT INTO tl_...')
    #2 /srv/www/xxx/public/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(1295): Doctrine\DBAL\Driver\PDOConnection-&gt;query('INSERT INTO tl_...')
    #3 /srv/www/xxx/public/vendor/contao/core-bundle/src/Resources/contao/library/Contao/Database/Statement.php(274): Doctrine\DBAL\Connection-&gt;executeQuery('INSERT INTO tl_...')
    #4 /srv/www/xxx/public/vendor/contao/core-bundle/src/Resources/contao/library/Contao/Database/Statement.php(24 (500 Internal Server Error) -->

    PHP-Code:
    'price_offen_1' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_bb_getraenke']['price_offen_1'],
                
    'inputType'               => 'text',
                
    'exclude'                 => true,
                
    'sorting'                 => true,
                
    'flag'                    => 1,
                
    'search'                  => true,
                
    'eval'                    => array('rgxp'=>'digit''unique'=>false'decodeEntities'=>true'maxlength'=>128'tl_class'=>'clr'),
                    
    'sql'                     => "double(10,2) NULL" 
    Geändert von Spooky (25.08.2021 um 14:48 Uhr) Grund: use PHP

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Zitat Zitat von Nacht69 Beitrag anzeigen
    eintragen läuft über ajax
    In wie fern?


    Zitat Zitat von Nacht69 Beitrag anzeigen
    eintragen läuft über ajax somit krieg ich nur das result per console.log
    Was meinst du mit console.log?

    Über den Symfony Profiler kannst du dir die Debug Ausgaben der letzten 10 Requests ansehen.



    Zitat Zitat von Nacht69 Beitrag anzeigen
    PHP-Code:
    'price_offen_1' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_bb_getraenke']['price_offen_1'],
                
    'inputType'               => 'text',
                
    'exclude'                 => true,
                
    'sorting'                 => true,
                
    'flag'                    => 1,
                
    'search'                  => true,
                
    'eval'                    => array('rgxp'=>'digit''unique'=>false'decodeEntities'=>true'maxlength'=>128'tl_class'=>'clr'),
                    
    'sql'                     => "double(10,2) NULL" 
    Definiere es mal so:

    PHP-Code:
    'sql' => ['type' => 'decimal''scale' => 2'notnull' => false
    » sponsor me via GitHub or PayPal or Revolut

  14. #14
    Contao-Fan
    Registriert seit
    16.01.2012.
    Beiträge
    414

    Standard

    eintragen läuft über ajax

    In wie fern?
    Naja das Eintragen der Getränke funktioniert über ein Passwortgeschütztes Frontend. Dort wird dann per Javascript / Ajax eine PHP Datei aufgerufen mit dem insert befehl.

    Was meinst du mit console.log?

    Javascript

    Code:
     console.log(result);
    result ist das result der ajax abfrage...

    Über den Symfony Profiler kannst du dir die Debug Ausgaben der letzten 10 Requests ansehen.
    Logs->Debug ? Da steht nix zu diesem Thema drin....


    Definiere es mal so:

    PHP-Code:
    PHP-Code:
    'sql' => ['type' => 'decimal''scale' => 2'notnull' => false
    Leider fast das selbe:

    Code:
    Invalid datetime format: 1366 Incorrect decimal value: '' for column

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Zitat Zitat von Nacht69 Beitrag anzeigen
    Naja das Eintragen der Getränke funktioniert über ein Passwortgeschütztes Frontend.
    Achso, das heißt du machst das gar nicht über einen DataContainer, sondern über eigenen Code? Dann bist du auch selbst dafür verantwortlich, dass das richtige in der Datenbank eingtragen wird. Das Contao Backend würde wie gesagt den richtigen Leerwert automatisch eintragen.


    Zitat Zitat von Nacht69 Beitrag anzeigen
    Logs->Debug ? Da steht nix zu diesem Thema drin....
    Was genau meinst du damit? Wie gesagt kannst du im Symfony Profiler die letzten 10 Requests analysieren. Also du aktivierst den Debug-Modus, machst die Requests, öffnest dann den Profiler und klickst links oben auf "Last 10".



    Zitat Zitat von Nacht69 Beitrag anzeigen
    Leider fast das selbe:

    Code:
    Invalid datetime format: 1366 Incorrect decimal value: '' for column
    Wie gesagt, nachdem das dein eigener Code ist, musst du das Problem dort beheben.
    » sponsor me via GitHub or PayPal or Revolut

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •