2012-09-26 19 views
5

Ich habe eine Datenbank mit einer Elternteil-Kind-Beziehung. Ich muss zuerst in die Elterntabelle einfügen und dann die ID bekommen, mit der ich dann Daten in die Kindtabelle einfügen würde.PDO lastInsertId(); Problem PHP

Das folgende ist Schnipsel des Codes, den ich verwende, um in die Datenbank einzufügen. Dies ist das erste Mal, dass ich die PDO-Klasse verwende. Die Fehler, die ich bekomme; Nicht definierte Eigenschaft: und Aufruf einer Memberfunktion lastInsertId() für eine Nicht-Objektdatenbank :: $ db. Ich muss zugeben, ich bin ziemlich neu in PHP. Danke


{ 

    public function __construct($DB_TYPE, $DB_HOST, $DB_NAME, $DB_USER, $DB_PASS) 
    { 
     parent::__construct($DB_TYPE.':host='.$DB_HOST.';dbname='.$DB_NAME, $DB_USER, $DB_PASS); 
} 

$this->db = new database(DB_TYPE, DB_HOST, DB_NAME, DB_USER, DB_PASS); 

$this->db->insert('images', array(
     'image_userID' => $data['image_userID'], 
     'image_date' => $data['image_date'] 
    )); 

/** 
* insert 
* @param string $table A name of table to insert into 
* @param string $data An associative array 
*/ 
public function insert($table, $data) 
{ 
    $fieldNames = implode('`, `', array_keys($data)); 
    $fieldValues = ':' . implode(', :', array_keys($data)); 

    $sth = $this->prepare("INSERT INTO $table (`$fieldNames`) VALUES ($fieldValues)"); 

    foreach ($data as $key => $value) { 
     $sth->bindValue(":$key", $value); 
    } 

    $sth->execute(); 

$result= $this->db->lastInsertId(); 
return $result; 
} 

Antwort

6

Der letzte Einsatz ID stammt aus der aktiven Anweisung, und nicht aus dem Datenbankhandle. Also die letzte Zeile dieses Ihres Codes ändern:

$return = $sth->lastInsertId(); 
+0

Vielen Dank für Ihre Antwort, ich habe lastInsertId() arbeiten, und sah in den beiden anderen Fragen Sie sprach, entfernte ich das Semikolon, Sie, wo genau dort, aber wenn ich den Backtick aus dem Feldnamen entferne, wird meine Funktion nicht mehr eingefügt. – denn

+0

Wie Sie sehen können, habe ich den Teil der Bindung entfernt. Sah darüber hinweg. Was den Backtick betrifft, sehe ich, dass im Implod auch Backticks hinzugefügt werden, also sind die Backticks in der Abfrage in Ordnung. Zu früh am Tag und nicht genug Kaffee. Das tut mir leid. – JvdBerg

+4

Diese Antwort ist nicht wahr. Die lastInsertId stammt vom PDO-Objekt, nicht von der Anweisung. http://php.net/manual/en/pdo.lastinsertid.php – jsgoupil