[英]PHP PDO MySql lastInsertId() returning 0
我有以下代碼,我從網站上提取並簡化了這些代碼。 此代碼僅適用於幾個字段
但我無法讓 lastInsertId() 工作,它總是返回 0
請幫忙
<?php
class Db {
private $host = "localhost";
private $user = "root";
private $pwd = "";
private $dbName = "cms";
public function connect() {
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbName;
$pdo = new PDO($dsn, $this->user, $this->pwd);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
return $pdo;
}
}
class Jobs extends Db {
public function addJob($job_date_time, $job_type, $job_decs) {
$sql = "INSERT INTO jobs(job_date_time, job_type, job_decs) VALUES (?, ?, ?)";
$stmt = $this->connect()->prepare($sql);
$stmt->execute([$job_date_time, $job_type, $job_decs]);
$lastId = $this->connect()->lastInsertId();
echo $lastId;
}
}
$jobs = new Jobs();
$job_date_time = "2021-11-11T11:40";
$job_type = "Test Type";
$job_desc = "Test Desc";
$jobs->addJob($job_date_time, $job_type, $job_desc);
如果您在生成 id 的同一會話中調用該函數,則lastInsertId()
僅返回生成的最后一個自動增量 id。
每次您調用$this->connect()
它都會打開一個新連接,因此它是一個新會話,並且前一個會話中的任何狀態(例如最后一個插入 ID)都將被重置。
您可能希望$this->connect()
跳過創建一個新連接(如果它已經有的話)。
class Db {
private $host = "localhost";
private $user = "root";
private $pwd = "";
private $dbName = "cms";
private $pdo;
public function connect() {
if (!$this->pdo) {
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbName;
$this->pdo = new PDO($dsn, $this->user, $this->pwd);
$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}
return $this->pdo;
}
}
這會在您第一次調用connect()
時打開一個新連接,但它會將連接保存為對象變量。 以后每次調用connect()
它只使用之前保存的相同連接。 該連接在此Db
對象的生命周期內保持打開狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.