下面是一些示例代碼:ID仍遞增數據庫失敗後查詢
$sql = "INSERT INTO Users (Firstname,Surname) VALUES ('$firstname', '$surname')";
$stmt = sqlsrv_query($conn, $sql,array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));
if(!$stmt)
{
die('Yu feiru!');
}
有數據庫3列; ID,名字和姓氏。 ID是一個自動增量主鍵。我也有一個獨一無二的鑰匙。所以,現在我已經把這一切都放到了角度,都解釋了我的問題。
當我的表單完成後,它會進入上面的代碼執行頁面。現在,最初這是有效的,因爲它應該,所以現在我會在ID爲1的表中創建我的第一條記錄。現在,如果我要刷新此頁面,它將返回一個錯誤,這顯然是因爲我插入的是相同的名字,因爲它是一個獨特的關鍵,它不會工作,迄今如此好。
這是問題所在,如果我現在要返回到表單並提交新的細節,新記錄顯示ID爲3.所以問題在於每次運行查詢時,無論是成功與否,它會增加ID。因此,如果我要刷新頁面5次,那麼新記錄的ID將爲7.
編輯:請注意,正如我所說的,這只是示例代碼。我仍然沒有采取任何防範SQL注入的措施。無論如何,非常感謝您的建議。
您的腳本很容易出現SQL注入。請確保您正確地轉義輸入。優先使用[Prepared Statements](準備陳述)(http://en.wikipedia.org/wiki/Prepared_statement)。 – TimWolla 2012-02-06 19:01:14
你確定沒有插入重複記錄嗎?你的if語句也應該是'$ stmt === false',因爲'!'可以處理許多不同的事情。 – Henesnarfel 2012-02-06 19:02:57
如果跳過號碼,自動遞增ID不關心。如果您刷新了300次並錯過了300個號碼,則無關緊要。對於一個非常注重細節的人來說,這可能會很麻煩,但如果ID被跳過,它確實沒有關係。 – 2012-02-06 19:03:29