2012-05-11 13 views
8

Ich habe einen Tabellennamen Boards, und ich versuche, Daten einfügen den aktuellen Code mitPHP PDO Syntaxfehler oder Zugriffsverletzung: 1064 auf dem Einsatz

function createBoard($name, $desc ) { 
    try { 
     $sth = $this->getLink()->prepare("INSERT INTO boards(id,memberid,name,desc,datecreated,isactive) 
      VALUES(?,?,?,?,?,?)"); 

     $uuid = $this->uuid(); 
     $memberid = 1; 
     $date = Utils::getDate(); 
     $isactive = 1; 

     $sth->bindParam(1, $uuid); 
     $sth->bindParam(2, $memberid); 
     $sth->bindParam(3, $name); 
     $sth->bindParam(4, $desc); 
     $sth->bindParam(5, $date); 
     $sth->bindParam(6, $isactive); 
     return $sth->execute(); 
    } catch(PDOException $e) { 
     /* 
     * save the error to the error log defined as @ERROR_LOG 
     */ 
     file_put_contents(ERROR_LOG, ("\n" . Utils::getDate() . " : " . $e->getMessage()), FILE_APPEND); 
     die("FATAL ERROR...Please check the error log."); 
    } 
} 

aber jedes Mal wenn ich diesen Fehler "2012-05-11 14:40:50: SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax, überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe entspricht ' DESC, Datecreated, isActive) VALUES ('d5989c7e-9b98-11e1-88cd-0026b936528c', '1' in Zeile 1 "

habe ich versucht, die gleiche Funktion bindValue() und nur das Array mit direkten Werten in die $sth->execute() Funktion setzen, aber ich erhalte immer den gleichen Fehler. Vielleicht kann ein Außenauge etwas entdecken, das ich vermisse oder falsch mache?

Antwort

28

Verkapseln Sie Ihre Feldnamen in Backticks (`), desc ist ein reserviertes Wort.

$sth = $this->getLink()->prepare("INSERT INTO `boards` (`id`,`memberid`,`name`,`desc`,`datecreated`,`isactive`) 
      VALUES(?,?,?,?,?,?)"); 
+1

DOH! Ich wusste, dass ich ein äußeres Auge brauchte, Danke ccKep Ich akzeptiere es als Antwort, wenn es mich lässt! – Naterade

Verwandte Themen