作者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