簡體   English   中英

PHP PDO MySql lastInsertId() 返回 0

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM