Ergebnis 1 bis 9 von 9

Thema: [GELÖST] Database Insert wird nicht ausgeführt.

  1. #1
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard [GELÖST] Database Insert wird nicht ausgeführt.

    Ho!

    Ich versuche gerade per Contao Daten aus einer Excel-Datei zu importieren. Dabei wende ich folgenden Code an:
    PHP-Code:
    $this->Database->prepare("INSERT INTO TABELLE (title) VALUES (?)")->execute($title); 
    und ich habe auch folgendes versucht:
    PHP-Code:
    $this->Database->query("INSERT INTO TABELLE (title) VALUES ("'.$title.'")); 
    Leider werden die INSERTS nicht gleich ausgeführt, sondern immer nur Teilweise wenn ich F5 drücke und die Datei erneut hochlade. Ich kann leider kein Muster erkennen, beim Hochladen wird nichts eingetragen, beim ersten F5 werden 3 Einträge hinzugefügt und beim nächsten Reload werden weitere 2 hinzugefügt.


    PHP-Code:
    if($arrGroups)
    {
       foreach(
    $arrGroups as $key => $title)
       {
          
    $Insert $this->Database->prepare("INSERT INTO TABELLE (title) VALUES (?)")->execute($title);
          echo 
    '<pre>'.print_r($Insert,1).'</pre>';
          echo 
    '<pre>'.print_r($Insert->error,1).'</pre>';
       }

    Die beiden echos sagen mir auch das es Ausgeführt wurde, ich bekomme keine Fehler oder Hinweise und kann auch kein Muster feststellen. Kann mir evt. jemand sagen was da los sein könnte?
    Geändert von Sioweb (04.11.2013 um 06:16 Uhr)
    Grüße Sascha W. @Sioweb
    schadebalken.de | zurück-zu-montag.de
    +++ Programmierer von Change-Lok erfasst worden +++

  2. #2
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Nur zur Sicherheit:

    INSERT INTO TABELLE

    steht in Deinem Code nicht wirklich drin? Da steht

    INSERT INTO tl_dein_tabellenname
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  3. #3
    Contao-Fan Avatar von bekanntmacher
    Registriert seit
    13.08.2009.
    Ort
    St. Gallen, Schweiz
    Beiträge
    354
    Partner-ID
    6419

    Standard

    Probiere mal mit ->executeUncached()

  4. #4
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard

    Ho!

    Danke für die Antworten, executeUncached probiere ich mal.

    Nein, da steht nicht TABELLE o: Aber danke für den Hinweis, Leichtsinnsfehler sind zwar ein häufiges Problem, jedoch würde dann eine Fehlermeldung in ->error erscheinen

    #Edit

    Ich habs jetzt mit insertUncached probiert, leider ohne Erfolg. Das Sript schreibt nach wie vor beim ersten hochladen gar nichts, beim zweiten Hochladen 3 Inserts und beim Dritten fügt es weitere hinzu. Aber jedesmal gebe ich folgendes aus:

    PHP-Code:
    Contao\Database\Mysql\Statement Object
    (
        [
    resConnection:protected] => Resource id #85
        
    [resResult:protected] => 1
        
    [strQuery:protected] => INSERT INTO tl_meine_tabelle (titleVALUES ('Hallo')
        [
    blnDisableAutocommit:protected] => 
    )

    Contao\Database\Mysql\Statement Object
    (
        [
    resConnection:protected] => Resource id #85
        
    [resResult:protected] => 1
        
    [strQuery:protected] => INSERT INTO tl_meine_tabelle (titleVALUES ('Hallo')
        [
    blnDisableAutocommit:protected] => 
    )

    Contao\Database\Mysql\Statement Object
    (
        [
    resConnection:protected] => Resource id #85
        
    [resResult:protected] => 1
        
    [strQuery:protected] => INSERT INTO tl_meine_tabelle (titleVALUES ('Hallo')
        [
    blnDisableAutocommit:protected] => 
    )

    Contao\Database\Mysql\Statement Object
    (
        [
    resConnection:protected] => Resource id #85
        
    [resResult:protected] => 1
        
    [strQuery:protected] => INSERT INTO tl_meine_tabelle (titleVALUES ('Hallo')
        [
    blnDisableAutocommit:protected] => 

    Wie wenn das Script plötzlich keine Lust mehr hätte. Aber auch das hier funktioniert nicht:

    PHP-Code:
    Contao\Database\Mysql\Statement Object
    (
        [
    resConnection:protected] => Resource id #85
        
    [resResult:protected] => 1
        
    [strQuery:protected] => INSERT INTO tl_giroflex_materialvariantgroups (titleVALUES ('a:1:{i:0;a:2:{s:5:\"value\";s:2:\"de\";s:5:\"label\";s:12:\"Metallfarben\";}}\'),(\'a:1:{i:0;a:2:{s:5:\"value\";s:2:\"de\";s:5:\"label\";s:23:\"Alu poliert / verchromt\";}}\'),(\'a:1:{i:0;a:2:{s:5:\"value\";s:2:\"de\";s:5:\"label\";s:16:\"Kunststofffarben\";}}\'),(\'a:1:{i:0;a:2:{s:5:\"value\";s:2:\"de\";s:5:\"label\";s:16:\"Holzoberflächen\";}}')
        [
    blnDisableAutocommit:protected] => 

    Geändert von Sioweb (01.11.2013 um 11:26 Uhr)
    Grüße Sascha W. @Sioweb
    schadebalken.de | zurück-zu-montag.de
    +++ Programmierer von Change-Lok erfasst worden +++

  5. #5
    Contao-Fan Avatar von bekanntmacher
    Registriert seit
    13.08.2009.
    Ort
    St. Gallen, Schweiz
    Beiträge
    354
    Partner-ID
    6419

    Standard

    Dan poste doch mal das ganze Script

  6. #6
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard

    Hier ist die entsprechende Funktion, in der Variable $arrGroups sind lediglich die Titel drin.

    PHP-Code:
    private function extractCSV($arrFiles)
        {
            
    $arrData = array();
            if(
    $handle $this->normalize(file(TL_ROOT.'/'.$arrFiles[0])))
            {
                
    $arrData str_getcsv($handle"\n");
                foreach(
    $arrData as $key => &$value)
                    
    $value str_getcsv($value,';');
            }

            
    $variantsData array_slice($arrData,1);
            
    $doubleHead = (array_slice($variantsData,0,2));

            
    $variantsData array_slice($variantsData,3);

            
    /* MATERIALVARIANTEN */

            
    $variantsHead $this->wellFormHead($doubleHead,10,35);
                
            
    $MaterialVariantGroups false;//MaterialvariantgroupsModel::findAll();
            
    $arrGroups $this->extractHeaderGroups($variantsHead,$variantsData,$MaterialVariantGroups,10,35);
            if(
    $arrGroups)
            {
                
    $Insert $this->Database->query("INSERT INTO tl_meine_tabelle (title) VALUES ('".implode('\'),(\'',$arrGroups)."')");
                echo 
    '<pre>'.print_r($Insert,1).'</pre>';
            }

            return 
    $arrData;
        } 
    Selbst wenn ich die SQL-Abfrage so ausführe geht es einfach nicht:

    PHP-Code:
    $Insert $this->Database->query("INSERT INTO tl_giroflex_materialvariantgroups (title) VALUES ('a:1:{i:0;a:2:{s:5:\"value\";s:2:\"de\";s:5:\"label\";s:12:\"Metallfarben\";}}'),('a:1:{i:0;a:2:{s:5:\"value\";s:2:\"de\";s:5:\"label\";s:23:\"Alu poliert / verchromt\";}}'),('a:1:{i:0;a:2:{s:5:\"value\";s:2:\"de\";s:5:\"label\";s:16:\"Kunststofffarben\";}}'),('a:1:{i:0;a:2:{s:5:\"value\";s:2:\"de\";s:5:\"label\";s:16:\"Holzoberflächen\";}}')");
    echo 
    '<pre>'.print_r($Insert,1).'</pre>';

    Contao\Database\Mysql\Statement Object
    (
        [
    resConnection:protected] => Resource id #85
        
    [resResult:protected] => 1
        
    [strQuery:protected] => INSERT INTO tl_giroflex_materialvariantgroups (titleVALUES ('a:1:{i:0;a:2:{s:5:"value";s:2:"de";s:5:"label";s:12:"Metallfarben";}}'),('a:1:{i:0;a:2:{s:5:"value";s:2:"de";s:5:"label";s:23:"Alu poliert / verchromt";}}'),('a:1:{i:0;a:2:{s:5:"value";s:2:"de";s:5:"label";s:16:"Kunststofffarben";}}'),('a:1:{i:0;a:2:{s:5:"value";s:2:"de";s:5:"label";s:16:"Holzoberflächen";}}')
        [
    blnDisableAutocommit:protected] => 

    Geändert von Sioweb (01.11.2013 um 11:39 Uhr)
    Grüße Sascha W. @Sioweb
    schadebalken.de | zurück-zu-montag.de
    +++ Programmierer von Change-Lok erfasst worden +++

  7. #7
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard

    Ich hab jetzt herausgefunden das es nur dann nicht geht, wenn ich die Tabelle per TRUNCATE `tl_meine_tabelle`; leere, aber wenn ich die Tabelle über das Contao-Backend einmal befülle und wieder leere funktioniert das Script perfekt.

    Kann es sein das Contao nicht mit der ID 1 umgehn kann? Wenn ich mit PhpMyAdmin den Wert Autoincrement auf 10 Stelle, funktioniert es wieder, witzig ^^
    Geändert von Sioweb (01.11.2013 um 12:08 Uhr)
    Grüße Sascha W. @Sioweb
    schadebalken.de | zurück-zu-montag.de
    +++ Programmierer von Change-Lok erfasst worden +++

  8. #8
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Kling sehr strange. Hast du zufällig auch mal den "Contao Weg" probiert? Wenn ja, tritt dann der Fehler auch auf?
    PHP-Code:
    $this->Database->prepare('INSERT INTO TABLE %s')->set(array('title' => 'value'))->execute(); 

  9. #9
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard

    Ja, hab inzwischen alle Queries so umgeschrieben gehabt, aber der Fehler bleibt. Ich musste den Autoincrement-Wert nun auf 100 setzen damit es geht o:

    Mit jedem Insert wurde der Wert um 1 erhöht und ab einem bestimmten Wert hat es auch angefangen Daten in die Datenbank zu schreiben.
    Grüße Sascha W. @Sioweb
    schadebalken.de | zurück-zu-montag.de
    +++ Programmierer von Change-Lok erfasst worden +++

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
  •