未定义的方法 PDO lastInsertId
Posted
技术标签:
【中文标题】未定义的方法 PDO lastInsertId【英文标题】:undefined method PDO lastInsertId 【发布时间】:2012-10-09 20:30:00 【问题描述】:我有一个插入查询,我想从表中获取 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。
【问题讨论】:
【参考方案1】:lastInsertId
是PDO
的方法,而不是PDOStatement
。因此:
$db->lastInsertId();
【讨论】:
然后我收到错误:调用未定义的方法数据库::lastInsertId()database
是否扩展 PDO
?你用的是什么 PHP 版本?
我的 PHP 版本是:5.2.12。我已将我的 PHP 数据库类放在开始帖子中。
好吧,既然database
没有扩展PDO
,它显然也没有lastInsertId
的方法。您需要将该调用传递给您的 $handleDB
PDO
对象,或者您需要返回该对象,以便您的代码可以在其上调用 lastInsertId
。【参考方案2】:
您从 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();
拨打电话
【讨论】:
然后我收到错误:调用未定义的方法数据库::lastInsertId() 需要直接调用新的方法:$results = $db->executeQuery($sql); $lastid = $db->lastInsertId();【参考方案3】:您的数据库类需要通过扩展 PDO 成为 PDO 的子类
class database extends PDO
这样,PDO 中的所有方法都可用于您的子类。
【讨论】:
以上是关于未定义的方法 PDO lastInsertId的主要内容,如果未能解决你的问题,请参考以下文章
多线程单连接中的 PDO::lastInsertId() 是不是安全?