未定义方法 PDO lastInsertId

2022-08-30 21:38:11

我有一个插入查询,我想从表中获取ID。我一直在搜索,我找到了PDO的最后InsertId()。当我想使用它时,我得到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

从 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是 的方法,而不是 。因此:PDOPDOStatement

$db->lastInsertId();

推荐