2017-05-15 6 views
0

PHP PDO(5.6)で書かれたメソッドで、最後に挿入されたIDが返されます。 問題は、挿入が完了したが、0の "文字列"が返されることです。PDOS lastinsertIdがトランザクションで0を返しています。php - 5.6

stackoverflowには同じ問題で多くの投稿がありますが、解決策が見つかりませんでした。

私には何が欠けていますか?ここで

は、コードは次のとおりです。

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

はいそうです。挿入はOKです。 – zwitterion

+0

ちょっとライアン、あなたが送った投稿を見ましたが、私のシナリオは2つの解決策のいずれにも当てはまりません。私は接続が1つしかなく、私は自動増分IDを持っています。これが私がここに投稿した理由です。たぶん私が間違ってやっている何か – zwitterion

答えて

関連する問題