2010-02-05 18 views
2

這有點看起來很複雜,我想獲得處理後的查詢的id列值。我如何在處理它後獲取SQL查詢ID?

例如:

$qu = mysql_query("INSERT INTO msgs (msg,stamp) VALUES('$v1','$v2')"); 

我想存儲在數據庫中的相關信息後,讓該查詢的ID。

如果不可能,獲取最後的ID記錄並添加1將是安全和保證的?

注:我使用PHP和MySQL

感謝

回答

1

如果使用標準的MySQL在PHP中,你所要做的,就是用mysql_insert_id()這需要資源$link作爲參數(你的MySQL連接)

http://php.net/manual/en/function.mysql-insert-id.php

基本用法:

<?php 
    $link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
    if (!$link) { 
     die('Could not connect: ' . mysql_error()); 
    } 
    mysql_select_db('mydb'); 

    mysql_query("INSERT INTO mytable (product) values ('some product')"); 

    echo 'Last inserted record has id of ' . mysql_insert_id(); 
?> 
2

如果它是一個AUTO_INCREMENT列,使用PHP函數mysql_insert_id。

0

檢查here如果它`不適合你使用的mysqli爲PHP

1

不,這是不安全的搶最高的ID,只是加1並使用它作爲新的ID問題。這就是所謂的競賽條件。如果兩個查詢同時嘗試執行此操作,則可能是它們都選擇了SAME最高的ID,都嘗試添加1,然後BOTH嘗試使用相同的ID(這會很糟糕)。

這是更好的使用AUTO_INCREMENT字段,你這樣做,你可以爲(從http://php.net/manual/en/function.mysql-insert-id.php)如下檢索在PHP中插入ID:

<?php 
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db('mydb'); 

mysql_query("INSERT INTO mytable (product) values ('kossu')"); 
printf("Last inserted record has id %d\n", mysql_insert_id()); 
?> 
1

下面的代碼:

$qu = mysql_query("INSERT INTO msgs (msg,stamp) VALUES('$v1','$v2')"); 
$recent_id = mysql_insert_id(); 

變量recent_id是你正在尋找的。

獲取最後的ID記錄並添加1可能不安全,不保證。如果你真的想要安全起見,你最好使用我指出的解決方案。

希望它有幫助。