-1

最後の挿入IDの問題に直面しています。これは私のテーブル構造です

CREATE TABLE `user` (                                     
          `id` int(30) NOT NULL AUTO_INCREMENT,                   
          `fbtoken_id` varchar(255) DEFAULT NULL,                 
          `user_name` varchar(255) DEFAULT NULL,                  
          `email` varchar(50) NOT NULL,                           
          `city` varchar(50) DEFAULT NULL,                        
          `created` datetime DEFAULT NULL,                        
          `modified` datetime DEFAULT NULL,                       
          `fbuserid` varchar(255) DEFAULT NULL,                   
          PRIMARY KEY (`id`),                                     
          KEY `id` (`id`)                                         
        ) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=latin1  

$stmt = $this->core->dbh->prepare("INSERT INTO user(fbtoken_id,user_name,email,city,created,modified,fbuserid)
VALUES(:fbtoken_id,:first_name,:email,:location,:created,:modified,:fbuserid)");

$stmt->execute(array(':fbtoken_id' => $access_token, ':first_name' => $first_name, ':email' => $email, ':location' => $location,
':created' => $datetime, ':modified' => $datetime,':fbuserid' => $fbuserid));

$_SESSION['userid']=$this->core->dbh->lastInsertId();
$affected_rows = $stmt->rowCount();
echo 'userid', $_SESSION['userid'];

ここでは、最後の挿入 ID をセッションに設定し、すべてのトランザクションにユーザー ID を使用しています。私のローカル テストでは、最後の挿入 ID を正しく取得しています。すべてが完璧に機能します。しかし、コードをサーバーにアップロードすると、ある時点でセッションが設定されないか、最後の挿入 ID が 0 になります。ライブ サーバーで問題を再現する方法がわかりません。

新しいユーザー ID を取得するために最後の挿入 ID またはその他の代替手段を使用するのは正しい方法ですか?

私はいくつかのケースで使用するのを見ました

$this->core->dbh->beginTransaction();
  last insert id 
$this->core->dbh->commit();

このコードは必要ですか?

状況をデバッグするのを手伝ってください。前もって感謝します

//編集

$stmt = $this->core->dbh->prepare("INSERT INTO user(fbtoken_id,user_name,email,city,created,modified,fbuserid)
VALUES(:fbtoken_id,:first_name,:email,:location,:created,:modified,:fbuserid)");
$this->core->dbh->beginTransaction();
$stmt->execute(array(':fbtoken_id' => $access_token, ':first_name' => $first_name, ':email' => $email, ':location' => $location,
':created' => $datetime, ':modified' => $datetime,':fbuserid' => $fbuserid));

$_SESSION['userid']=$this->core->dbh->lastInsertId();
$affected_rows = $stmt->rowCount();
echo 'userid', $_SESSION['userid'];
 $this->core->dbh->commit();
4

1 に答える 1

1

最後の挿入 ID は、コミット後に機能しません。コミットが発生する前に実行する必要があります。指が滑ったので修正。したがって、lastinsert id を使用する場合は、コード内でトランザクションを制御する必要があります。

于 2014-02-14T05:07:10.863 に答える