2013-01-20 27 views
0

我插入一個行從PHP一個MySQL表和插入後立即運行一個查詢來獲取剛插入像這樣的行的鍵值:插入MySQL行但未保存?

$stmt = $this->db->prepare("INSERT INTO user(vFirstName, vLastName, vEmail, vPassword, iSkilllevelid, vTournaments, vDays, dAddedDate, eStatus) VALUES (?,?,?,?,4,'Pick-Up','Saturday',NOW(),'Active')"); 
$stmt->bind_param("ssss", $firstName, $lastName, $email, $pwd); 
$stmt->execute(); 
$stmt->close(); 

$stmt = $this->db->prepare('SELECT iUserId FROM user WHERE vEmail=?'); 
$stmt->bind_param("s", $email); 
$stmt->execute(); 
$stmt->bind_result($iUserId); 
while ($stmt->fetch()) { 
    break; 
} 

該代碼執行後,$iUserId有正確的自動遞增鍵值(例如1143),但是當我真正查看數據庫表時,具有該鍵(1143)的行不存在。這怎麼可能?

+0

您正在使用哪種MySQL引擎?我的第一個猜測是「事務隔離」。 –

+0

我的猜測是你指的是mysql上的不同表格:P – Vimalnath

+1

你用於MySQL的PHP​​庫有哪些? – hohner

回答

2

而是在插入後的表中選擇的,你應該使用mysqli::$insert_id

$stmt = $this->db->prepare(' 
    INSERT INTO user 
    (vFirstName, vLastName, vEmail, vPassword, iSkilllevelid, 
     vTournaments, vDays, dAddedDate, eStatus) 
    VALUES 
    (?,?,?,?,4,"Pick-Up","Saturday",NOW(),"Active") 
'); 
$stmt->bind_param('ssss', $firstName, $lastName, $email, $pwd); 
$stmt->execute(); 
$iUserId = $this->db->insert_id; 
$stmt->close(); 

至於爲什麼要插入的數據不能從其他的連接出現,這很可能是您的交易還未被提交:

$this->db->commit(); 
+0

謝謝!缺少提交是問題。 – Aaron