[請益] 關於登錄會員資料的 php寫法

看板PHP作者 (重新出發..)時間18年前 (2005/12/17 13:32), 編輯推噓5(503)
留言8則, 5人參與, 最新討論串1/1
或許這個問題是我多慮了 現在我要設計一個可以新增會員的php網頁 一般而言會有個儲存會員資料的資料表 那麼所謂新增會員資料 增加資料到此資料表中.. 且此資料表會有個類似 'userid' 的欄位, 用來紀錄會員id. 假設我寫了一個 insert.php 來負責新增會員資料 當然每個會員id不能重複 所以當insert 一筆新的會員資料到資料表中 假設加入會員id為 'newid'到資料表中.. insert.php會先檢查資料表中是否已存在 欄位'userid' = newid 的資料 若不存在則加入資料.. 若已存在'userid'=newid的資料 則代表先前已有人申請過這個id..所以不再insert新的'newid'會員資料 所以我的 insert.php 程式碼應該會分成兩部分 <?php 先檢查 所以我的 insert.php 程式碼應該會分成兩部分 <?php //先檢查會員id是否已經存在資料表中 query("selecet * forom user where userid='newid'"); //在insert資料 if(row.num==0) insert data; ?> 以上的寫法一般狀況下可以正常運作 但問題在於兩個使用者同時登錄新資料的情形下 假設現在有兩個人同時申請新的會員資料 且會員id均為 'newid'.. 問題1:在server端中會同時執行兩個 insert.php 還是兩個insert.php會先後執行? 問題2: 若兩個insert.php同時執行 , 則可能在第一段檢查手續時同時發現資料庫中沒有 'newid' 這個資料. 使得兩人都通過了檢查,最後一起加入 'newid'到資料庫中 最後造成兩個會員id一樣.. 請問要如何避開這種錯誤呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.31.164.1

12/17 13:38, , 1F
用MySQL的自動增加功能
12/17 13:38, 1F

12/17 16:46, , 2F
把id欄位設為unique(不允許重複值),資料庫會幫你確保這
12/17 16:46, 2F

12/17 16:48, , 3F
個欄位值不會重複,即使你認為同時有兩筆相同值的資料寫入
12/17 16:48, 3F

12/17 16:48, , 4F
實際上還是一前一後,後者會寫入失敗。
12/17 16:48, 4F

12/17 16:51, , 5F
因此保險起見在執行完資料寫入後要檢查是否有成功寫入
12/17 16:51, 5F

12/17 19:22, , 6F
該如何檢查寫入失敗呢?
12/17 19:22, 6F

12/17 20:29, , 7F
mysql_query($sql) or die(mysql_error());
12/17 20:29, 7F

12/18 14:17, , 8F
樓上上:寫入失敗就回上一頁..請user重新選擇帳號..
12/18 14:17, 8F
文章代碼(AID): #13ewBaYK (PHP)