18

挿入クエリがあり、テーブルからIDを取得したいと思います。私は検索していて、PDOのlastInsertId()を見つけました。使いたいとするとPHPエラーが出ます。

これは私のコードです:

$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

私のデータベースクラス:

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

誰かが私がそれを解決するのを手伝ってくれることを願っています、私は挿入クエリで与えられるIDが欲しいです。

4

3 に答える 3

35

lastinsertidは、結果オブジェクトではなく、PDOオブジェクトから取得します。

試す$db->lastInsertId()

以下を編集します。

データベースクラスは、handleDB/PDOオブジェクトをカプセル化しています。handleDB変数はプライベートであるため、クラスの外部でこれにアクセスすることはできません。そのように公開する必要があります。

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()または、次のような関数としてを公開することもできます。

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

}

あなたはを使用して呼び出す$db->lastInsertId();

于 2012-10-19T08:53:32.590 に答える
17

lastInsertIdのメソッドでありPDO、ではありませんPDOStatement。したがって:

$db->lastInsertId();
于 2012-10-19T08:53:23.677 に答える
0

データベースクラスは、PDOを拡張してPDOのサブクラスにする必要があります

class database extends PDO

そうすれば、PDOのすべてのメソッドをサブクラスで使用できます。

于 2012-10-19T09:07:08.993 に答える