作者beak (重新出發..)
看板PHP
標題[請益] 關於登錄會員資料的 php寫法
時間Sat Dec 17 13:37:02 2005
或許這個問題是我多慮了
現在我要設計一個可以新增會員的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
1F:推 ottokang:用MySQL的自動增加功能 12/17 13:38
2F:推 marinne:把id欄位設為unique(不允許重複值),資料庫會幫你確保這 12/17 16:46
3F:→ marinne:個欄位值不會重複,即使你認為同時有兩筆相同值的資料寫入 12/17 16:48
4F:→ marinne:實際上還是一前一後,後者會寫入失敗。 12/17 16:48
5F:→ marinne:因此保險起見在執行完資料寫入後要檢查是否有成功寫入 12/17 16:51
6F:推 beak:該如何檢查寫入失敗呢? 12/17 19:22
7F:推 appleboy46:mysql_query($sql) or die(mysql_error()); 12/17 20:29
8F:推 kuoyu:樓上上:寫入失敗就回上一頁..請user重新選擇帳號.. 12/18 14:17