2010-08-06 68 views
7

當我執行在MySQL控制檯下面,它工作正常:通過PHP使用LAST_INSERT_ID()?

INSERT INTO videos (embed_code) VALUES ('test code here'); 
SELECT LAST_INSERT_ID(); 

但是,當我通過PHP執行上面的查詢,結果是空的。

在數據抽象下,我使用名爲DB的數據庫訪問類。這是我如何通過PHP嘗試了上述疑問:

$embedCode = htmlentities($_POST['embed_code']); 

//Insert video in database **WORKS** 
DB::query("INSERT INTO videos (embed_code) VALUES ('$embedCode');"); 

//Retrieve id **DOES NOT WORK** 
$row = DB::getSingleRow("SELECT LAST_INSERT_ID();"); 
$videoId = $row[0]; 

這是不可靠的,我由embed_code選擇新的標識,因爲embed_code可以重複。

謝謝!

回答

4

您的數據庫類是否包含一個函數來獲取最後一個插入ID?請嘗試使用mysql_insert_id(),否則。

http://nl.php.net/mysql_insert_id

+0

是的,你是對的。我使用的是PDO,它有一個'lastInsertId()'方法!我沒有想到這一點。謝謝! – 2010-08-06 16:19:13

1

PHP有一個叫做mysql_insert_id的函數,它會給你與查詢SELECT LAST_INSERT_ID();相同的結果。

0

這有專用功能 - 你不應該使用SQL版本,這是行不通的。

在MySQL庫中,您應該使用mysql_insert_id函數,而mysqli對象具有insert-id屬性。這當然可能已經暴露在你正在使用的任何數據庫類中。

+0

它爲什麼不起作用? – iX3 2012-10-03 22:38:09

0

您可以嘗試使用PHP的mysql_insert_id函數。

我認爲發生了什麼是每個DB::query調用是在不同的交易,因此$row是空的。也許你可以閱讀DB:query文檔以嘗試在同一事務中運行兩個調用。

0

mysql_insert_id已棄用。所以我認爲這個線程需要更新。

0

自PHP 5.5.0起,mysql_insert_id被標記爲棄用。

在這個例子中,uid是表格視頻的主鍵。

$row = DB::getMultipleRows("SELECT uid FROM videos WHERE uid=LAST_INSERT_ID();"); 
if (
    isset($row) && 
    is_array($row) && 
    isset($row['0']) && 
    is_array($row['0']) && 
    isset($row['0']['uid']) 
) { 
    $videoId = $row['0']['uid']; 
} 
0

您應該將PDO的lastInsertId返回到您的類的外部。例如:

class DB 
{ 
    public $last_insert_id; 
    function x() 
    { 
     $stmt = $db->prepare($Query); 
     $stmt->execute(); 
     $this->last_insert_id = $db->lastInsertId(); 
    }  
}