2011-09-22 57 views
0

我正在研究PHP和MySQL創建的調查。所以問題是,我正在嘗試創建一個ResponseID,它是每個提交調查問卷的人員的特定ID。因此,創建的代碼將1添加到ResponseID列中的現有最大值。下面的代碼:PHP MySQL max()函數生成5

//Response ID creation 
$query = "SELECT max(ResponseID) FROM survey"; 
$res = mysql_query($query); 
$RID = $res+1; 

我知道我可以凝聚,但這裏的問題:我已經進入了一個項目上表的1. ResponseID當我不同的答案測試的調查顯示,未來ResponseID是5.應該是2.所以我再次測試,看下一次是否會產生6次。

不幸的是,它又產生了5個。我讓我的PHP專家看了一遍,他說編碼是正確的,它應該是來自數據庫的東西。除了它是一個int外,我沒有在ResponseID中設置任何內容。那麼爲什麼它會產生5?如果任何人都可以請告訴我如何解決它,這將是超級酷的你。

我對PHP有點新鮮。

+0

謝謝你們幫助我的時間!我想我需要再次閱讀我的書。超級酷你們! ;) – bsuravech

回答

1

$ res將是一個mysql語句句柄,而不是查詢的結果。您仍然必須從此$ res結果中實際獲取一行以訪問查詢中max()函數的值。

這個句柄可能在內部有標識符#5,這就是爲什麼你會得到那個「奇怪」的結果。

的代碼應該是:

$sql = "SELECT MAX(responseID) AS max ..."; 
$result = mysql_query($sql) or die(mysql_error()); 
$row = mysql_fetch_assoc($result); 

$RID = $row['max'] + 1; 
0

你爲什麼不使用AUTO_INCREMENT柱和檢索使用mysql_insert_id新的價值?

0

您需要使用AUTO_INCREMENT列此。問題是,如果PHP腳本的兩個實例同時運行(極有可能假設你使用像Apache一個多線程的服務器),那麼你可以有這樣的情況:

|PHP #1   | PHP #2  | 
================================= 
|Accept client |(waiting)  | 
|SELECT MAX... |(waiting)  | 
|Send to MySQL | Accept client | 
|(waiting)  | SELECT MAX... | 
|(waiting)  | Send to MySQL | 
|Get response 4 |Get response 4 | //Nothing inserted yet, max is still 4 
|Try to insert 5| (waiting)  | 
|Succeeded  | (waiting)  | 
|(waiting)  |Try to insert 5| 
| ...   | Failed!  | 

(這除了Dagon說的)

0

使用$row = mysql_fetch_assoc($res)從查詢中得到結果行。

請參閱mysql_fetch_assoc()

0

你沒有得到正確值的原因是因爲mysql_query沒有返回值,它返回一個資源。

試試這個:

//Response ID creation 
$query = "SELECT max(ResponseID) FROM survey"; 
$res = mysql_query($query); 
if($res !== FALSE) $res = mysql_fetch_array($res); // If $res === FALSE, something went wrong 
$RID = $res[0] + 1; 

此外,我建議你在ResponseID場使用AUTO_INCREMENT,這使你的生活輕鬆了許多:)

+0

謝謝湯姆!這工作完美。我拿走了你和大's的建議,它很有效。我會利用Auto_Increment選項,但我不知道如何將其應用於每個參與調查的人員。調查問題和答案像12行,他們都有一個ResponseID。 – bsuravech

0

我真的不知道,如果我理解烏爾問題,但是如果您想生成特定於每個用戶或每個調查問卷的響應ID,那麼您可以使用auto_increment作爲響應ID。每次發佈新調查時,響應ID都會增加。還會獲取使用mysql_insert_id發佈的最後一個id,以獲取發佈的最後一個id。

,這樣你們可以得到使用

$last_id = mysql_insert_id(); 

u需要把該聲明烏爾查詢之後的最後一個ID。這樣你可以得到最後一個ID。