Ergebnis 1 bis 10 von 10

Thema: Was mach ich nur "too few arguments to build the query string"

  1. #1
    Contao-Nutzer Avatar von dcm75
    Registriert seit
    21.06.2009.
    Beiträge
    96

    Standard Was mach ich nur "too few arguments to build the query string"

    Hallo,

    ich weiß nicht wie ich mit der Fehlermeldung weiterkomme, die ich beim Speichern bekomme. Auch wenn nichts verändert wurde und "Speichern" wähle erhalte ich diese Fehledermeldung:

    Die Anzeige ist:
    Anhang 8157

    Alle SQL, die ich mir von den echo's ausgegeben habe funktionieren einwandfrei beim Ausführen mit HeidiSql.

    Der Code ist leider etwas länger:

    PHP-Code:
        public function saveValueKat($value$dc$katSubKatIdentifier)
        {
            if(
    $katSubKatIdentifier == "kategorie")
            {
                
    $sqlDel = array('
                    DELETE dands_shopkategoriedeeplink, dands_shopkategorie 
                    FROM rech_db.dands_shopkategoriedeeplink 
                    LEFT JOIN dands_shopkategorie ON (dands_shopkategoriedeeplink.ShopKategorieId = dands_shopkategorie.Kategorie) 
                    WHERE dands_shopkategorie.pid = "'
    .$dc->id.'" AND dands_shopkategoriedeeplink.pid="'.$dc->id.'";
                    '
    );
                
    $katID="Kategorie";
                
    $fieldNames = array('Kategorie''ShopKategorieId''ShopDeepLink''ShopDeepLink_rtz''ShopDeepLink_ls24''ShopDeepLink_nn');
                
                
    $sqlMidTableAux " INSERT INTO rech_db.dands_shopkategorie (pid, Kategorie) VALUES ";
            }
            else if(
    $katSubKatIdentifier == "subkategorie")
            {
                
    $sqlDel = array('
                    DELETE dands_shopkategoriedeeplink, dands_shopsubkategorie
                    FROM rech_db.dands_shopkategoriedeeplink 
                    LEFT JOIN dands_shopsubkategorie ON (dands_shopkategoriedeeplink.ShopKategorieId = dands_shopsubkategorie.SubKategorie) 
                    WHERE dands_shopsubkategorie.pid = "'
    .$dc->id.'" AND dands_shopkategoriedeeplink.pid="'.$dc->id.'";
                    '
    );
               
    $katID="SubKategorie";
               
    // field names von dands_shopdeeplink
               
    $fieldNames = array('Kategorie''ShopKategorieId''ShopDeepLink''ShopDeepLink_rtz''ShopDeepLink_ls24''ShopDeepLink_nn');
               
               
    $sqlMidTableAux " INSERT INTO rech_db.dands_shopsubkategorie (pid, SubKategorie) VALUES  ";
            }
            else 
            {
                exit(
    "::saveValueKat $katSubKatIdentifier nicht gesetzt!");
            }
            
    $desValue deserialize($valueTRUE);
            
    $desValue array_reverse($desValue);
            
            
    $sqlMidTable = array();
            
    $sql = array();
            
            foreach (
    $desValue as $valueOneDim)
            {
                 
                
                
    $valueOneDim $this->reduceValueToFields($valueOneDim$fieldNames);
                
                if(
    $valueOneDim['Kategorie'] != '')
                {
                    
    // Wertepaar in Zwischentabelle dands_kategorie bzw. dands_subkategorie einfügen
                    
    array_push($sqlMidTable $sqlMidTableAux.'("'.$dc->id.'","'.$valueOneDim['Kategorie'].'"); ');
                    
                     
    // Anführungzeichen zulassen
                    
    $valueOneDim array_map('htmlspecialchars',$valueOneDim);
                    
    $entry implode('", "',$valueOneDim);
                    
    $fields 'pid, ShopKategorieId,ShopDeepLink,ShopDeepLink_rtz,ShopDeepLink_ls24,ShopDeepLink_nn, tstamp';
        
                    
    $values '"'.$dc->id.'", "'.$entry.'"';
                    
    array_push($sql' INSERT INTO dands_shopkategoriedeeplink ('.$fields.') VALUES ('.$values.', NOW());');
                }
                else 
                {
                    echo(
    "<br><br><br>saveValueKat :: MÖGLICHERWEISE EIN PROBLEM ::_valueOneDim[_katID] ist leer <br><br><br>");
                }
            }
            
            echo 
    "<br><b>$katID *****************************</b><br>".implode($sqlDel)."<br><br>";
            echo 
    "<b>MID</b><br> ".implode($sqlMidTable)."<br><br>";
            echo 
    "<b>ShopKatLink</b><br>".implode($sql)."<br><br>";
            echo 
    "<br><br><br>###########################################<br><br>  ";
        
            if(
    sql != '')
            {
                
    $this->execSqlArr($sqlDel);
                
    $this->execSqlArr($sqlMidTable);
                
    $this->execSqlArr($sql);
            }
            else 
            {
                echo 
    $SQL ist Leer";
                exit(
    "fajksdfhjkasdhfjkashjk");
            }
                
            return 
    $value;
        } 

    PHP-Code:
        public function saveSubCategoriesRB($value$dc)
        {
            if(!
    $value)
            {
                 
            }
            else
            {
                
    $this->saveValueKat($value$dc'subkategorie');
            }
            
            return 
    $value;
        } 
    Hier wird die Funktion "saveSubCategoriesRB" aufgerufen:
    PHP-Code:
     'ShopSubKategorien' => array
        (
            
    'label'                   => &$GLOBALS['TL_LANG']['dands_shop']['ShopSubKategorien'],
            
    'inputType'               => 'multiColumnWizard',
            
    'search'                  => true,
            
    'filter'                  => false,
            
    'save_callback'           => array(array('dands_shop''saveSubCategoriesRB')),
            
    'load_callback'           => array(array('dands_shop''loadSubCategoriesRB')),
            
    'eval'                    => 
                array 
                (
                    
    'columnFields' => array
                    (
                        
    'Kategorie' => array
                        (
                            
    'label'                 => &$GLOBALS['TL_LANG']['dands_shopkategorie']['Kategorie'],
                            
    'exclude'               => false,
                            
    'inputType'             => 'select',
                            
    'options_callback'        => array('dands_shop''getShopSubKategorienRb'),
                            
    'eval'                  => array('style' => 'width:150px''allowHtml'=>true'mandatory'=>true'doNotSaveEmpty'=>true 'maxlength'=>100)
                        ),
                        
    'ShopDeepLink' => array
                        (
                                
    'label'                 => &$GLOBALS['TL_LANG']['dands_shopkategoriedeeplink']['ShopDeepLink'],
                                
    'exclude'               => false,
                                
    'inputType'             => 'text',
                                
    'eval'                  => array('style' => 'width:100px''allowHtml'=>true'mandatory'=>false'doNotSaveEmpty'=>true 'maxlength'=>2000)
                        ),
                        
    'ShopDeepLink_rtz' => array
                        (
                                
    'label'                 => &$GLOBALS['TL_LANG']['dands_shopkategoriedeeplink']['ShopDeepLink_rtz'],
                                
    'exclude'               => false,
                                
    'inputType'             => 'text',
                                
    'eval'                  => array('style' => 'width:100px''allowHtml'=>true'mandatory'=>false'doNotSaveEmpty'=>true 'maxlength'=>300)
                        ),
                        
    'ShopDeepLink_ls24' => array
                        (
                                
    'label'                 => &$GLOBALS['TL_LANG']['dands_shopkategoriedeeplink']['ShopDeepLink_ls24'],
                                
    'exclude'               => false,
                                
    'inputType'             => 'text',
                                
    'eval'                  => array('style' => 'width:100px''allowHtml'=>true'mandatory'=>false'doNotSaveEmpty'=>true 'maxlength'=>300)
                        ),
                        
    'ShopDeepLink_nn' => array
                        (
                                
    'label'                 => &$GLOBALS['TL_LANG']['dands_shopkategoriedeeplink']['ShopDeepLink_nn'],
                                
    'exclude'               => false,
                                
    'inputType'             => 'text',
                                
    'eval'                  => array('style' => 'width:100px''allowHtml'=>true'mandatory'=>false'doNotSaveEmpty'=>true 'maxlength'=>300)
                        ),
                    ),
                    
    'mandatory' => false
                    
    'doNotSaveEmpty'=>true
                    
    'accesskey'=>'pid'
                    
    'columns' =>5,  
                )
        ), 
    Hat jemand einen Ansatz für mich wie ich mit dem Debugging weiter komme.

    Die Meldung "too few arguments to build the query string" bringt mich nicht weiter ...

    Danke und Viele Grüße
    Daniel

  2. #2
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    Was genau wird hier gemacht :
    PHP-Code:
    $this->execSqlArr($sqlDel); 
                
    $this->execSqlArr($sqlMidTable); 
                
    $this->execSqlArr($sql); 
    Sind das Wrapper fuer das Contao Framework ?
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  3. #3
    Contao-Nutzer Avatar von dcm75
    Registriert seit
    21.06.2009.
    Beiträge
    96

    Standard

    Hi, die Funktionier führt die SQL aus.

    Hab schon andere Konstrukte probiert mit und ohne prepare - hat leider nichts gebracht.

    PHP-Code:
       public function execSqlArr($sqlArr)
        {
            foreach (
    $sqlArr AS $sql)
            {
                
    $this->Database->prepare($sql)->execute();;
            }
            
        } 

  4. #4
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    Dann wuerd ich erstmal mir den Query String anschauen. Also im Sinne von diesem hier :

    PHP-Code:
    $objRequest $this->Database->prepare($sql)->execute();
    echo 
    $objRequest->query
    Dann wirst Du schnell sehen, wo fehlerhafte Angaben sind.
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  5. #5
    Contao-Nutzer Avatar von dcm75
    Registriert seit
    21.06.2009.
    Beiträge
    96

    Standard ->query hilft weiter!

    Hi, BINGO - das Fragezeichen ist das Problem!

    PHP-Code:
    INSERT INTO dands_shopkategoriedeeplink (pidShopKategorieId,ShopDeepLink,ShopDeepLink_rtz,ShopDeepLink_ls24,ShopDeepLink_nntstampVALUES ("88""41""TEST3?"""""""NOW()) 
    Das Fragezeichen soll da aber rein. Wie sag ich der Funktion "$this->Database->execute", dass das obige statement ausgeführt werden soll?

    Viele Grüße
    Daniel

  6. #6
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.515
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    $sql "INSERT INTO dands_shopkategoriedeeplink (pid, ShopKategorieId,ShopDeepLink,ShopDeepLink_rtz,ShopDeepLink_ls24,ShopDeepLink_nn, tstamp) VALUES (?, ?, ?, ?, ?, ?, ?)";
    $objRequest $this->Database->prepare($sql)->execute("88""41""TEST3?"""""""NOW()); 
    ungetestet.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  7. #7
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    diese "?" werden durch die Parameter im execute ersetzt.
    D.h. du musst deine Parameter irgendwie mit in deine Funktion bringen
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  8. #8
    Contao-Nutzer Avatar von dcm75
    Registriert seit
    21.06.2009.
    Beiträge
    96

    Standard

    Vielen Danke für die Hilfe!

    hab eine Version hinbekommen, die funktioniert. Schöne find ich die Lösung mit dem ->execute(...) allerdings nicht.

    Zumindest $this->Database->execute($sql); sollte doch die "?" ignorieren?

    Gute Nacht
    Daniel
    Geändert von dcm75 (19.07.2012 um 22:38 Uhr) Grund: Ergänzung

  9. #9
    Contao-Urgestein
    Registriert seit
    03.06.2010.
    Ort
    Wuppertal
    Beiträge
    2.149
    User beschenken
    Wunschliste

    Standard

    Wenn du kein Prepare benutzt werden auch keine "?" ersetzt, execute führt aber nur ein vorbereitetes Statement aus.

    Wenn du reine Queries absetzen und ausführen möchtest, weil du sie vorher schon vorbereitet hast oder sie aus externen Quellen zusammengestellt werden, dann bietet sich die Funktion query() an, die ein Statement einfach ausführt...

  10. #10
    Contao-Nutzer Avatar von dcm75
    Registriert seit
    21.06.2009.
    Beiträge
    96

    Daumen hoch

    Hi Flex, Ah ok

    Das mit query() Statements direkt ausgeführt werden können war mir neu.

    Danke Dir!
    Daniel

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
  •