2017-05-15 98 views
0

我有一個用PHP PDO(5.6)編寫的方法,它應該返回最後插入的ID。 問題是插入已完成,但它返回0「字符串」。PDO lastinsertId在事務中返回0,php - 5.6

在這裏有很多帖子在同一個問題的計算器,但我找不到解決方案。

我錯過了什麼?

下面是代碼:

public static function set_values(array $arrSql = NULL) { 

     try {    

      $fields=""; 
      $bindParamStr = ""; 
      $values = ""; 
      foreach ($arrSql as $tableName => $arrSetValues) { 
       $table=$tableName;          //Inside 1 table 
       foreach ($arrSetValues as $fieldName => $arrParam) { 
        $fields .= $fieldName.",";       //Inside 1 field 
        $values .= "?,"; 
        $bindParamStr[]=$arrParam;     
       } 
      } 
      self::$sql= "INSERT INTO $tableName (".rtrim($fields,",").") VALUES (".rtrim($values,",").")"; 
      $stmt = self::$conn->prepare(self::$sql); 
      $i=1; 
      foreach ($bindParamStr as $bindPar) { 
       if(count($bindPar)==1){ 
        $stmt->bindValue($i,$bindPar[0]); 
       } 
       else{ 
        $stmt->bindValue($i,$bindPar[0],$bindPar[1]); 
       } 
       $i++; 
      } 


      self::$conn->beginTransaction(); 

      if($stmt->execute()){ 
       self::$conn->commit(); 
       $id= self::$conn->lastInsertId(); 
       return $id; 
      } 
      else{ 
       return FALSE; 
      } 

     } 
     catch (PDOException $e) { 

      self::$arrCatchConnResult = self::saveLogMsg(["exceptionObjc"=>$e,"sql"=>self::$sql]); 

      $msg = self::$arrCatchConnResult["displayMsgHTML"]; 

      self::$conn = null; 

      if (self::$die) { 

       die($msg); 
      } 
     } 
    } 
+0

被插入的行,它有一個auto_incrementing id列? –

+0

是的。插入是可以的。 – zwitterion

+0

嗨瑞恩,我看到了你發來的帖子,但是我的場景並不適合2種可能的解決方案。我只有1個連接,我有一個自動增量ID。這就是我在這裏發佈的原因。也許我做錯了 – zwitterion

回答