lastInsertId () возвращает пустую строку - PullRequest
2 голосов
/ 06 декабря 2011

Почему?

try{

    $st = $this->prepare("INSERT INTO thetable (a,b) VALUES (?,?)");
    $st->execute(array(5,5));

    $id = $this->lastInsertId();

    echo $id;            // nothing 
    echo gettype($id);   // string

    return $id;          // and I get NULL returned, this is even weirder...

}catch(PDOException $e){
    die($e);
    return false;
}

В таблице есть столбец идентификатора с автоматическим приращением.Почему я не могу получить значение идентификатора?

Ответы [ 2 ]

5 голосов
/ 06 декабря 2011

ок, только что выяснил почему. Я публикую это как ответ, потому что, скорее всего, найдутся другие, которые столкнутся с той же проблемой: D

Так что PDO::lastInsertId(); будет пустым, если вы называете его после PDO::commit(), что я и сделал, потому что использовал атомарные транзакции. Он должен быть вызван после execute () ...

Обратите внимание, что в приведенном выше коде у меня нет функции beginTransaction и commit (), поэтому код в моем вопросе на самом деле правильный, проблема была дома:)

1 голос
/ 06 декабря 2011

вместо

$this->lastInsertId();

пробовали ли вы

$st->lastInsertId();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...