lastInsertId 返回 0

实际上,有很多关于这个的帖子。但即使我检查了那些,仍然找不到问题。


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。我在这里缺少什么?


慕婉清6462132
浏览 188回答 1
1回答

一只萌萌小番薯

$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;}
打开App,查看更多内容
随时随地看视频慕课网APP