2012-10-19 21 views
10

挿入クエリがあり、テーブルからIDを取得したいとします。私は検索していて、PDOのlastInsertId()が見つかりました。私はそれを使用したいとき、私はPHPのエラーが発生します。定義されていないメソッドPDO lastInsertId

これは私のコードです:私は、誰かが私を解決するのに役立つことを願って

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); 
    } 

:この1

$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(); 

しかし、これはエラーを与える:

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 

私のデータベースクラスそれは、挿入クエリで与えられたIDが欲しいです。

答えて

21

最終結果は、結果オブジェクトではなくPDOオブジェクトから取得されます。

は以下$db->lastInsertId()

編集をお試しください。

データベースクラスがhandleDB/PDOオブジェクトをカプセル化しています。 handleDB変数はprivateなので、クラス外ではアクセスできません。そのようにパブリックにする必要があります。

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); 
    } 

} 

今、あなたは$db->handleDB->lastInsertId();

を呼び出すことができますまたはあなたは次のように関数としてhandleDB->lastInsertId()を公開することができます:あなたは、あなたのデータベースクラスがあることが必要$db->lastInsertId();

+0

次に、エラーが発生しました。定義されていないメソッドデータベース:: lastInsertId()を呼び出す – Marnix

+0

私はこの質問を更新しました。 –

+0

あなたの素晴らしい、ありがとうございました。 – Marnix

11

lastInsertIdPDOであり、PDOStatementではありません。したがって、

$db->lastInsertId(); 
+0

私はエラーを取得しています:定義されていないメソッドデータベース:: lastInsertId()を呼び出す – Marnix

+0

'データベース'は 'PDO'を拡張しますか?どんなPHPバージョンがありますか? – deceze

+0

私のPHPのバージョンは5.2.12です。私はPHPデータベースクラスをbegin postに入れました。 – Marnix

0

を使用して呼び出します

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(); 
    } 

} 

PDOを拡張してPDOのサブクラス

class database extends PDO 

このようにして、PDOのすべてのメソッドをサブクラスで使用できます。