未定义的方法PDO lastInsertId(undefined method PDO lastIn

2019-08-01 16:00发布

我有一个插入查询,我想从表中的ID。 我一直在寻找,我发现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);
    }

我希望有人能帮助我解决这个问题,我想这在INSERT查询中给出的ID。

Answer 1:

您从PDO对象获得lastinsertid,而不是你的结果对象。

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



Answer 2:

lastInsertId是的方法PDO ,不PDOStatement 。 因此:

$db->lastInsertId();


Answer 3:

数据库类需要通过扩展PDO是PDO的子类

class database extends PDO

这样所有在PDO的方法是提供给您的子类。



文章来源: undefined method PDO lastInsertId