Undefined метод PDO lastInsertId

У меня есть запрос на вставку, и я хочу получить идентификатор из таблицы. Я искал, и я нашел lastInsertId() для PDO. Когда я захочу использовать его, я получаю ошибки 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, который был указан во вставном запросе.

Ответ 1

Вы получаете 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();

Ответ 2

lastInsertId - это метод PDO, а не PDOStatement. Поэтому:

$db->lastInsertId();

Ответ 3

ваш класс базы данных должен быть подклассом PDO, расширяя PDO

class database extends PDO

таким образом, все методы в PDO доступны вашему подклассу.