PDO lastinsertId возвращает 0 в транзакции, 5.6

У меня есть метод, написанный на PHP PDO (5.6), который должен вернуть последний вставленный идентификатор.
Проблема в том, что вставка завершена, но она возвращает 0 «строку».

В 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

Решение

Получите идентификатор вставки перед совершением транзакции:

$id = self::$conn->lastInsertId();
self::$conn->commit();

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]