2014-06-14 93 views
-1

我有這樣的一些代碼:添加獨特的自動代碼PHP

?> 
mysql_connect("localhost", "root", ""); 
mysql_select_db("db_akademik"); 

$query = "SELECT max(nim) as idMaks FROM tb_mahasiswa"; 
$hasil = mysql_query($query); 
$data = mysql_fetch_array($hasil); 
$nim = $data['idMaks']; 

//mengatur 6 karakter sebagai jumalh karakter yang tetap 
//mengatur 3 karakter untuk jumlah karakter yang berubah-ubah 
$noUrut = (int) substr($nim, 6, 3); 
$noUrut++; 

//menjadikan 201353 sebagai 6 karakter yang tetap 
$char = "201353"; 
//%03s untuk mengatur 3 karakter di belakang 201353 
$IDbaru = $char . sprintf("%03s", $noUrut); 

?> 

它的工作原理。但是當我添加一些記錄直到3(003)或4(004)時,它停止並且沒有改變(如果最後一個記錄003,它仍然是003)。

有什麼不對?是關於重新加載頁面?因爲當我繼續下去的時候,它再次奏效。

+0

要知道,你不應該用你的「活」的網站root帳號連接到數據庫。您的root帳戶應該有密碼。最後,你使用舊的mysql連接器更容易發生SQL注入攻擊,如果可能的話,你應該使用mysqli。 – MikeWu

+0

稍後我將更改爲mysqli。我需要先解決這些代碼,直到它正常工作。 – user3740978

回答

0

如果2個查詢一起運行,它們可能會得到相同的max(nim)值。然後他們將生成相同的$IDbaru來插入。如果nim碰巧是您的表的主鍵,則後面的插入查詢肯定會失敗。

我建議:

  1. 使用一個簡單的整數爲你的表ID

  2. 使用auto_increment它。這意味着如果你沒有指定id,服務器會爲你生成而不會有重複。

  3. 更改表格的AUTO_INCREMENT值以匹配您的ID策略。例如,

    ALTER TABLE tb_mahasiswa AUTO_INCREMENT = 201353000;

+0

我認爲它不能更改爲自動增量,因爲nim是唯一代碼(varchar)。 – user3740978

+0

然後,您應該在選擇查詢之前正確鎖定表格並在插入後解鎖。請參考:[此鏈接](http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html) –

+0

性能不好,但它的工作。 –