其实关于这个的帖子有很多。但即使我检查了这些,仍然找不到问题。
DBC类
protected function connect(){
$dns = "mysql:host=" . $this->server . ";dbname=" . $this->database;
$pdo = new PDO($dns, $this->username, $this->password);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
return $pdo;
}
和插入功能。
public function insert_row($created_at){
$sql = "INSERT INTO empty_rows (created_at) VALUES (?)";
$stmt = $this->connect()->prepare($sql);
$stmt->execute([$created_at]);
$id = $this->connect()->lastInsertId();
echo $id;
}
我认为它应该返回最后插入的 ID,但是它只返回 0。我在这里缺少什么?
$lastInsertId()
返回在同一连接上插入的 ID。每次通话时您都会获得新的连接$this->connect()
.
您需要保存结果$this-connect()
所以你使用相同的连接。
public function insert_row($created_at){
$sql = "INSERT INTO empty_rows (created_at) VALUES (?)";
$connect = $this->connect();
$stmt = $connect->prepare($sql);
$stmt->execute([$created_at]);
$id = $connect->lastInsertId();
echo $id;
}
一般来说,如果您不断创建新连接,您的应用程序将会显着减慢。我建议你改变connect()
方法,因此它仅在第一次连接。
protected function connect(){
if (!isset($this->pdo) {
$dns = "mysql:host=" . $this->server . ";dbname=" . $this->database;
$this->$pdo = new PDO($dns, $this->username, $this->password);
$this->$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}
return $this->$pdo;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)