2014-02-14 115 views
-1

上午與去年插入ID面臨的問題,這是我的表結構PDO最後插入的id返回0

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.我不明白如何在活動服務器中複製該問題。

這是正確的方式來使用最後insertid或任何其他替代獲得新的用戶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(); 

回答

1

末插入ID將無法正常工作。因爲手指滑落而編輯。所以如果你想使用lastinsert id - 你需要控制代碼中的事務。

+0

我閱讀手冊,但這裏沒有使用commit(),沒有提交得到正確的最後一個插入ID。我也嘗試了commit()。我在提取最後一個插入ID後使用了commit()。它也正常工作。 – Dibish

+0

你的意思是在本地,並且它在服務器上一次不工作? – wribit

+0

它在本地服務器上工作,我從來沒有遇到過任何問題,在現場它也工作。但對於一些用戶,當我檢查數據庫他們的會話ID是0.我不能複製這個問題呢?這是會話還是最後一個inser id的問題? – Dibish