2013-10-20 46 views
-1

我有兩個表我maintenance.php頁面上的auto_incrementing ID檢索自動遞增ID爲不同的頁面

MAINTENANCE 
maintenance_id int(11) NOT NULL AUTO_INCREMENT, 
description varchar(50) 
PRIMARY KEY (maintenance_id) 

我有一個查詢,生成maintenance_id。

$sql = "insert into maintenancereq (maintenance_id,description) 
     values('','description')"; 

而我有一個不同的PHP頁面,我需要那個maintenance_id。我將如何去查找在maintenance.php頁面上爲不同頁面上的不同查詢生成的ID是什麼?

回答

0

MySQL爲這種情況提供了LAST_INSERT_ID()函數。

執行

SELECT LAST_INSERT_ID() 

具有插入一排後,其結果將是自動生成的ID。請注意,該查詢應在插入後直接執行,因爲必須使用相同的連接。所檢索的值然後必須被傳遞到另一個頁面,例如,通過參數或會話變量。如果使用相同的連接,另一個INSERT到另一個客戶端的同桌是沒有問題的,因爲文件規定:

每個客戶端將收到最後插入的ID的最後聲明,客戶端執行

欲瞭解更多信息,請參閱MySQL Documentation about that function

+0

將這項工作即使查詢是在不同的PHP文件被執行原來的查詢在哪裏? – user2894925

+0

是的,但在另一個頁面中,當他得到的是last_insert_id時,存在其他腳本使用該表並插入數據的風險。如果發生這種情況,他不會得到真正的last_insert_id –

+0

同意,最後一個插入ID的查詢將不得不直接在'INSERT'之後執行。然後,它發生在同一個連接上。然後該id值必須傳遞給其他頁面,例如,通過會議或params。 –

1

通過一種方式來manatain持久性數據:

  1. 你可以使用會話$_SESSION,有持久性數據在接下來的頁面

  2. 你可以從maintenance.php重定向到下一個頁面中的鏈接一個id,你的鏈接可能看起來像http://myurl?maintenanceId=1&blah=blah

然後將獲得的ID通過$_GET

if(isset($_GET['maintenanceId']) && is_numeric($_GET['maintenanceId'])) { 
// do blah blah 
} 
+0

只有當您確定當前客戶端不會將新數據插入'maintenancereq'時,才使用'mysql_insert_id()' –

1

所有你需要做的就是在你的代碼中使用

mysql_insert_id(); 

。 這將檢索由上一個查詢(通常是INSERT)爲AUTO_INCREMENT列生成的ID。

$sql = "insert into maintenancereq (maintenance_id,description) 
     values('','description')"; 

只要執行上面的查詢並使用mysql_insert_id();.您可以將此值放在url字符串中,並從下一頁獲取值。或者,您可以將它放到會話中,然後從會話中檢索它。

做看看here