2012-11-17 71 views
0

我不能夠得到使用$db->lastInsertId();$db->lastInsertId('fid');PDO lastInsertId()沒有得到價值

$stmt = $db->stmt_init(); 

$sql = "INSERT INTO ch_files_details (name,extension,size,parent) VALUES (?,?,?,?)"; 

$stmt = $db->prepare($sql) or die($db->error()); 

$stmt->bind_param('ssii', $filename, $extension, $filesize, $parent); 

$stmt->execute(); 

$fid = $db->lastInsertId(); 

東西丟失或錯誤的存在價值lastinsertid?

我可以插入表中,但無法獲取最後插入的ID。

Table Definition: 
`ch_files_details` (
`fid` bigint(20) NOT NULL AUTO_INCREMENT, 
`name` text NOT NULL, 
`extension` text NOT NULL, 
`size` bigint(20) NOT NULL, 
`parent` bigint(20) NOT NULL, 
PRIMARY KEY (`fid`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ; 
+0

把錯誤檢查? http://php.net/manual/en/pdo.errorinfo.php –

+0

你的表有一個id列嗎? – m02ph3u5

+0

@JeremyJStarcher沒有錯誤.. – Mezzan

回答

2

PDO::lastInsertId因爲不使用PDO這裏行不通。您上面的代碼是MySQLi代碼,而不是PDO。使用mysqli::$insert_id.

// This is all MySQLi prepared statement code, not PDO!!! 
// PDO uses bindParam(), not bind_param(), doesn't have stmt_init(), and doesn't use the 'ssii' type strings for binding 
$stmt = $db->stmt_init(); 
$sql = "INSERT INTO ch_files_details (name,extension,size,parent) VALUES (?,?,?,?)"; 
$stmt = $db->prepare($sql) or die($db->error()); 
$stmt->bind_param('ssii', $filename, $extension, $filesize, $parent); 
$stmt->execute(); 

// insert_id is a property of the connection MySQLi object 
$fid = $db->insert_id; 

審查the MySQLi manual的全部細節。在某個時候,你最終選擇了錯誤的文檔集。

+0

謝謝Michael Berkowski。我和mysqli和pdo混淆了。難怪我看到PDO使用Commit而不是語句執行。 – Mezzan

+1

PDO也使用'execute()',但不同。 'commit()'用於提交事務。 –