Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Fehler im PDO Statement?!

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Fehler im PDO Statement?!

    Hi Leute,

    sorry erstmal für den schlechten Threadtitel, aber ich kann ja schlecht einen halben Roman da reinzwängen.

    Ausgangssituation:
    DAS GANZE IST AUCH ALS ÜBUNG FÜR OOP ANGELEGT.
    Ich soll aus einer vorhandenen CSV-Datei Datensätze in eine Datenbank importieren.
    Das Auslesen der CSV-Datei funktioniert auch.

    Problem:
    Ich arbeite das erste mal mit PDO. Dabei versuche ich mit einem prepare die DB vorzubereiten.
    Beim dann folgenden execute kommt nix in die Datenbank. Könnt ihr mir vielleicht dabei weiterhelfen?


    Code:
    PHP-Code:
    public function __construct(){
            
    $db = new PDO('mysql:host=localhost;dbname=db_ensdorf''root''');
            
    $this->stmt $db->prepare(
                        
    "INSERT INTO db_ensdorf (uid,pid,tstamp, crdate,title,bdate,btime,edate,etime,fees,teaser, location) 
                        VALUES (:uid,350,:tstamp,:tstamp,:title,:date,:btime,:date,:etime,:fees,:teaser, :location)"
    );
        
            
    $this->readCSV();
        }
        
        public function 
    readCSV(){
            
    $csv file("http://127.0.0.1/endorf/data.csv");
            
    $i 500;
            
    //echo $i.'<br>';
            
    foreach ($csv as &$line){
                
                
    $line explode(";",$line);
                
    $date explode(" ",$line[2]);
                
    $datefunctions = new DateFunctions;
                
    $date[0] = $datefunctions->DateTransform($date[0]);
                
    $date[1] = $datefunctions->TimeTransform($date[1]);
                
    $line[3] = $datefunctions->TimeTransform($line[3]);
                
                
    $uebertrag = array(
                        
    "$i",
                        
    time(),
                        
    "$line[1]",
                        
    "$date[0]",
                        
    "$date[1]",
                        
    "$line[3]",
                        
    "$line[5]",
                        
    "Veranstaltungsnr.:$line[0] Anzahl Termine:$line[4]",
                        
    "$line[6] $line[7] $line[8] $line[9]");
                
                    
    $this->setValues($uebertrag);
                    
    $i++;
            }
            unset(
    $line);
            echo 
    'Fertig.';
        }
        
        public function 
    setValues($values) {
            
    $this->uid=$values[0];
            
    $this->tstamp=$values[1];
            
    //$this->crdate=$values(1);
            
    $this->title=$values[2];
            
    $this->date=$values[3];
            
    $this->btime=$values[4];
            
    $this->etime=$values[5];
            
    $this->fees=$values[6];
            
    $this->teaser=$values[7];
            
    $this->location=$values[8];
            
            
    $this->BindParams();
        }
        
        public function 
    BindParams(){
            
    $this->stmt->bindparam(':uid',$this->uidPDO::PARAM_INT);
            
    $this->stmt->bindparam(':tstamp',$this->tstampPDO::PARAM_INT);
            
    //$this->stmt->bindparam(':crdate',$this->crdate);
            
    $this->stmt->bindParam(':title'$this->titlePDO::PARAM_STR);
            
    $this->stmt->bindParam(':date'$this->datePDO::PARAM_INT);
            
    $this->stmt->bindParam(':btime'$this->btimePDO::PARAM_INT);
            
    //$this->stmt->bindParam(':edate', $this->date);
            
    $this->stmt->bindParam(':etime'$this->etimePDO::PARAM_INT);
            
    $this->stmt->bindParam(':fees'$this->feesPDO::PARAM_STR);
            
    $this->stmt->bindParam(':teaser'$this->teaserPDO::PARAM_STR);
            
    $this->stmt->bindparam(':location',  $this->locationPDO::PARAM_STR);
            
            
    $this->ImportEvent();
        }
        
        public function 
    ImportEvent(){
            
    $this->stmt->execute();
        } 
    Grüße
    Ra3L

  • #2
    bau mal in deine Funktion $importevent folgendes ein

    PHP-Code:
    $this->stmt->debugDumpParams(); 
    (hinter das execute)

    http://de.php.net/manual/de/pdostate...dumpparams.php

    warum öffnest du die CSV über html-Wrapper, wenn sie doch besser "lokal" auf dem Webserver liegen sollte

    Kommentar


    • #3
      Da kam folgender Salat bei raus.

      Code:
      SQL: [213] INSERT INTO db_ensdorf (uid,pid,tstamp, crdate,title,bdate,btime,edate,etime,fees,teaser, location) VALUES (:uid,350,:tstamp,:tstamp,:title,:date,:btime,:date,:etime,:fees,:teaser, :location) Params: 9 Key: Name: [4] :uid paramno=-1 name=[4] ":uid" is_param=1 param_type=1 Key: Name: [7] :tstamp paramno=-1 name=[7] ":tstamp" is_param=1 param_type=1 Key: Name: [6] :title paramno=-1 name=[6] ":title" is_param=1 param_type=2 Key: Name: [5] :date paramno=-1 name=[5] ":date" is_param=1 param_type=1 Key: Name: [6] :btime paramno=-1 name=[6] ":btime" is_param=1 param_type=1 Key: Name: [6] :etime paramno=-1 name=[6] ":etime" is_param=1 param_type=1 Key: Name: [5] :fees paramno=-1 name=[5] ":fees" is_param=1 param_type=2 Key: Name: [7] :teaser paramno=-1 name=[7] ":teaser" is_param=1 param_type=2 Key: Name: [9] :location paramno=-1 name=[9] ":location" is_param=1 param_type=2
      Ich vermute, auch nach dem Lesen der php.net Seite, dass der Probleme mit dem array hat in der Funktion setvalues, lieg ich da richtig?

      Kommentar


      • #4
        ja dann .. mehr debug-Ausgaben

        lass dir doch das Array $values mal ausgeben in der Methode setValues

        warum hast du den linearen Ablauf eigentlich derart zerpflückt - was spricht dagegen, es in einer Methode zu machen ?

        Kommentar


        • #5
          Die Werte werden den Eigenschaften korrekt mitgegeben.
          Somit dürfte der Fehler irgendwo in der Methode BindParams
          sein.

          Wie gesagt ist das meine erste Übung für die OOP.
          Das zu zerpflücken ist natürlich Over-The-Top, aber hilft
          mir trotzdem zum weiteren Verständnis zur OOP.

          Ich hab das ganze auch schon in einer Methode zusammengefasst
          und es funktionierte nicht.

          Was meintest du eigentlich mit der CSV Datei, dass ich die mit HTML-Wrapper öffne?!

          Kommentar


          • #6
            du hast bei der csv irgendwas mit http://localhost bzw 127.0.0.1 stehen - das heißt du greifst über http-Wrapper drauf zu - wo doch die Datei auf deinem Webserver liegt (ODER LIEGEN SOLLTE)

            darf dein php überhaupt mittels http-Wrapper die Datei öffnen ?

            schau mal mit phpinfo() nach, ob allow_url_fopen auf "ON" steht.

            Daneben würde ich die Aufrufe in eine Methode sammeln, damit du nicht noch Probleme mit dem Scope deiner Variablen bekommst - du speicherst bei dir zum Beispiel unnötig die CSV Daten in lokale Variablen deiner Klasse ... das ist wohl unnötig

            Kommentar


            • #7
              Steht auf "ON", ich hab den Befehl zum Öffnen der CSV jetzt aber so geändert.
              Wenn das so ist, wie du meinst.
              PHP-Code:
              $csv file("data.csv"); 
              Mit dem zusätzlichen Speichern meinst du, dass ich aus der $line dann
              eigene Variablen nochmal mache?

              Da ich ja ein wenig mit Eigenschaften etc. hantieren WILL speichere ich
              die Daten extra so ab.
              Das $date array um die datefunctions zu nutzen scheint mir aber unverzichtbar zu sein,
              da eine Spalte in der CSV Datum und Uhrzeit in einem ist. Deswegen das Explode auf die
              $line[2].

              PHP-Code:
              $date explode(" ",$line[2]);
              $datefunctions = new DateFunctions;
              $date[0] = $datefunctions->DateTransform($date[0]);
              $date[1] = $datefunctions->TimeTransform($date[1]); 

              Kommentar


              • #8
                Ok, ganz blöder Fehler.....

                hab den DB namen als Table im SQL statement angegeben....
                Sonst war der Code zu 100% korrekt.

                Trotzdem danke für die Hilfe.

                Grüße
                Ra3l

                Kommentar

                Lädt...
                X