2012-10-19 6 views
10

Ich habe eine Abfrage einfügen, und ich möchte die ID aus der Tabelle erhalten. Ich habe gesucht, und ich fand lastInsertId() für PDO. Wenn ich es benutzen will, bekomme ich PHP-Fehler.undefined Methode PDO LastInsertId

Dies ist mein Code:

$db = new database(); 
$naam = $db->quoteQuery($_POST['naam']); 
$barcode = $db->quoteQuery($_POST['barcode']); 
$sql = "INSERT INTO products(name, barcode) VALUES (".$name.",".$barcode.")"; 
$results = $db->executeQuery($sql); 
$lastid = $results->lastInsertId(); 

Aber dies einen Fehler gibt, dieses:

Fatal error: Call to undefined method PDOStatement::lastInsertId() in /home/onlineweuh/domains/onlinewebapps.nl/public_html/vsb/admin/add-product.class.php on line 297 

Meine Datenbank-Klasse:

class database 
{ 
    private $handleDB; 
    public function __construct() 
    { 
     $host = ; 
     $user = ; 
     $database = ; 
     $password = ; 
     try 
     { 
      $this->handleDB = new PDO('mysql:host='.$host.';dbname='.$database, $user, $password); 
     } 
     catch (PDOException $e) 
     { 
      print_r($e); 
     } 

     $this->handleDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
    } 

Ich hoffe jemand mir lösen helfen kann Ich möchte die ID, die bei der Abfrage einfügen gegeben ist.

Antwort

21

Sie erhalten die LASEINSERIDID aus dem PDO-Objekt und nicht Ihr Ergebnisobjekt.

Versuchen $db->lastInsertId()

bearbeiten unten.

Ihre Datenbankklasse kapselt Ihr handleDB/PDO-Objekt. Da die handleDB-Variable privat ist, können Sie nicht auf diese außerhalb Ihrer Klasse zugreifen. Du müsstest es entweder öffentlich machen;

class database 
{ 
    public $handleDB; 
    public function __construct() 
    { 
     $host = 'removed'; 
     $user = 'removed'; 
     $database = 'removed'; 
     $password = 'removed'; 
     try 
     { 
      $this->handleDB = new PDO('mysql:host='.$host.';dbname='.$database, $user, $password); 
     } 
     catch (PDOException $e) 
     { 
      print_r($e); 
     } 

     $this->handleDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
    } 

} 

Jetzt können Sie $db->handleDB->lastInsertId();

nennen Oder Sie könnten die handleDB->lastInsertId() als Funktion wie belichten:

class database 
{ 
    private $handleDB; 
    public function __construct() 
    { 
     $host = 'remove'; 
     $user = 'removed'; 
     $database = 'removed'; 
     $password = 'removed'; 
     try 
     { 
      $this->handleDB = new PDO('mysql:host='.$host.';dbname='.$database, $user, $password); 
     } 
     catch (PDOException $e) 
     { 
      print_r($e); 
     } 

     $this->handleDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
    } 

    public function lastInsertId(){ 
     return $this->handleDB->lastInsertId(); 
    } 

} 

Sie nennen würde mit $db->lastInsertId();

+0

Dann bekomme ich den Fehler: Aufruf an undefined Methodendatenbank :: lastInsertId() – Marnix

+0

Ich habe diese Frage für Sie aktualisiert. –

+0

Ihre erstaunliche, vielen Dank. – Marnix

11

lastInsertId ist eine Methode von PDO, nicht PDOStatement. Daher:

$db->lastInsertId(); 
+0

Dann bekomme ich den Fehler: Aufruf an undefinierte Methode database :: lastInsertId() – Marnix

+0

Erweitert 'Datenbank'' PDO'? In welcher PHP-Version bist du? – deceze

+0

Meine PHP Version ist: 5.2.12. Ich habe meine PHP-Datenbank-Klasse im Anfangspost platziert. – Marnix

0

Ihre Datenbank-Klasse ein muss sein Unterklasse von PDO durch Erweiterung von PDO

class database extends PDO 

so sind alle Methoden in PDO für Ihre Unterklasse verfügbar.