为了账号安全,请及时绑定邮箱和手机立即绑定

lastInsertId 返回 0

lastInsertId 返回 0

PHP
慕婉清6462132 2022-12-23 13:16:01
实际上,有很多关于这个的帖子。但即使我检查了那些,仍然找不到问题。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。我在这里缺少什么?
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

$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;

}


查看完整回答
反对 回复 2022-12-23
  • 1 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信