首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO lastinsertId在事务php-5.6中返回0。

PDO lastinsertId在事务php-5.6中返回0。
EN

Stack Overflow用户
提问于 2017-05-15 18:28:57
回答 1查看 967关注 0票数 0

我有一个用PHP (5.6)编写的方法,它应该返回最后插入的id。问题是插入已完成,但它返回0 "string“。

这里有很多关于相同问题的堆叠溢出的帖子,但我无法为自己找到解决方案。

我遗漏了什么?

以下是代码:

代码语言:javascript
复制
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);
            }
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-15 18:40:12

在提交事务之前获取insert id:

代码语言:javascript
复制
$id = self::$conn->lastInsertId(); 
self::$conn->commit(); 

http://www.php.net/manual/en/pdo.lastinsertid.php#85129

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43986452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档