PDO bindParam

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

  • PDO bindParam

    Hallo

    hat jemand ne Erklärung dafür, warum untenstehendes SQL-Statement fehlerhaft sein soll?
    Die Fehlermeldung kommt darunter.

    PHP-Code:
    try {
    $sql "SELECT DokumentID, Name, Inhalt 
    FROM dokumente WHERE Team IN ('Geschäftsführung Vertrieb' ,'Vertrieb' ,'Vertriebsunterstützung' ) 
    AND Unternehmen= :unternehmen 
    ORDER BY Datum DESC LIMIT 0,15"
    ;
    $stmt $dbh->prepare($sql);
    $stmt->bindParam(':unternehmen'$this->unternehmen);
    $stmt->execute();
    foreach (
    $stmt as $row) {
    $dokumentarray[$count] = $row["DokumentID"];
                                }
    } catch (
    PDOException $e) {
    print 
    "<br>Error!: " $e->getMessage() . "<br/>";
    echo 
    "<br>SQL: " $sql;
    die();
            } 
    Error!: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':unternehmen ORDER BY Datum DESC LIMIT 0,15' at line 1
    Zuletzt geändert von Stonebreaker62; 30.07.2007, 16:36.

  • #2
    mach mal eine testausgabe von $this->unternehmen und setze sie in die query ein - wird diese dann manuell ausgeführt?

    Kommentar


    • #3
      Re: PDO bindParam

      Code umbrechen.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Habe mal den aktuellen Wert für $this->unternehmen eingesetzt.
        Wenn ich die daraus resultierende SQL nehme, funktioniert das.

        PHP-Code:
        $sql "SELECT DokumentID, Name, Inhalt FROM dokumente 
        WHERE Team IN ('Geschäftsführung Vertrieb' ,'Vertrieb' ,'Vertriebsunterstützung' ) 
        AND Unternehmen= 'ABC' ORDER BY Datum DESC LIMIT 0,15"

        Zuletzt geändert von Stonebreaker62; 30.07.2007, 16:35.

        Kommentar


        • #5
          http://www.php-resource.de/forum/sho...threadid=50454
          Noch mal wiederhole ich's nicht.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            minimiere die query bis
            Code:
            SELECT * FROM ... WHERE Unternehmen = :unternehmen
            klappt es dann?

            Kommentar


            • #7
              ja, das funktioniert

              Kommentar


              • #8
                und jetzt erweitere die query schrittweise zurück. wann hört's auf zu funktionieren?

                Kommentar


                • #9
                  Sobald ich folgendes Statement definiere gehts nicht mehr.
                  Ich vermute mal der bindParam kann nicht mit dem String umgehen, der mehrere Teile beinhaltet.
                  PHP-Code:
                  $sql="SELECT DokumentID, Name, Inhalt FROM dokumente 
                  WHERE Team IN :teams 
                  AND Unternehmen= :unternehmen ORDER BY Datum DESC LIMIT 0,15 "
                  ;

                  $stmt $dbh->prepare($sql);
                  $stmt->bindParam(':unternehmen'$this->unternehmen);
                  $stmt->bindParam(':teams'$teams);
                  $stmt->execute();
                  foreach (
                  $stmt as $row) {
                      
                  $dokumentarray[$count] = $row["DokumentID"];

                  Kommentar


                  • #10


                    noch mal: versuche _schrittweise_ zu erweitern, sodass du am ende mir sagen kannst: wenn ich ... mache, kommt dieser fehler. woher soll ich wissen, was du als letztes gemacht hast? und bleib doch bitte bei der einen query am anfang.

                    Kommentar


                    • #11
                      Sorry, wenn ich für Konfusion gesorgt habe.

                      Das erste Statement geht, das zweite nicht.

                      PHP-Code:
                      $sql "SELECT DokumentID, Name, Inhalt FROM dokumente 
                      WHERE Unternehmen= :unternehmen ORDER BY Datum DESC LIMIT 0,15"
                      ;

                      $sql "SELECT DokumentID, Name, Inhalt FROM dokumente 
                      WHERE Team IN ('Geschäftsführung Vertrieb' ,'Vertrieb' ,'Vertriebsunterstützung' ) 
                      AND Unternehmen= :unternehmen ORDER BY Datum DESC LIMIT 0,15"
                      ;

                      $stmt $dbh->prepare($sql);
                      $stmt->bindParam(':unternehmen'$this->unternehmen);
                      $stmt->execute();
                      foreach (
                      $stmt as $row) {
                         
                      $dokumentarray[$count] = $row["DokumentID"];

                      Kommentar


                      • #12
                        hm.. lass mal nur
                        Code:
                        ... WHERE Team IN ('Vertrieb') ...
                        übrig (weil keine umlaute). klappt es dann?

                        Kommentar


                        • #13
                          Du bist auf der richtigen Spur.

                          Ich habe die Umlaute einfach entfernt und schon rollt es.

                          Ist das ein Bug oder siehst Du da ne Lösungsmöglichkeit?

                          Kommentar


                          • #14
                            mach mal ein
                            PHP-Code:
                            $dbh->exec('SET CHARACTER SET utf8'
                            vorher, falls der editor utf8 benutzt.

                            Kommentar


                            • #15
                              Hab das wie folgt eingefügt - leider ohne Erfolg.


                              PHP-Code:
                              $dbh->exec('SET CHARACTER SET utf8');
                              $stmt $dbh->prepare($sql);
                              $stmt->bindParam(':unternehmen'$this->unternehmen); 

                              Kommentar

                              Lädt...
                              X