挿入クエリがあり、テーブルから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が欲しいです。
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();
を使用して呼び出します
lastInsertId
はPDO
のメソッドであり、PDOStatement
ではありません。したがって:
$db->lastInsertId();
データベースクラスは、PDOを拡張してPDOのサブクラスにする必要があります
class database extends PDO
そうすれば、PDOのすべてのメソッドをサブクラスで使用できます。