[请益] 资料重复写入问题?

楼主: joedenkidd (优质的蓝色射手)   2014-11-21 10:57:25
Hi All:
$up_sql="update db set value=1 where id='123' and sn='2345'";
$up_exec=pg_exec($server_link,$up_sql);
$up_result=pg_affected_rows($up_exec);
if($up_result==0)
{
$ins_sql="insert into db(id,sn) values('234','aaa')";
$ins_exec=pg_exec($server_link,$ins_sql);
}
以上是我资料更新或新增的程式,正常来说,当 db里面有 id='123',sn='2345'的时候
pg_affected_rows的值并不会等于0
所以我用这种方式来判断资料是要更新或是新增,
可是观察了一阵子,发现还是有部分的资料,会
被重复写入,不知道这样子是出了什么问题,请
各位指点一下,拜托...
程式:PHP
DB : POSTGRESQL
作者: alog (A肉哥)   2014-11-21 11:10:00
db资料是有更新才affected 不是你下完指令执行成功就算如果你要避免部分资料进入数据库 要做好检查适时配合lock相关指令做搭配 以及你要利用unique key避免重复写入
楼主: joedenkidd (优质的蓝色射手)   2014-11-21 12:34:00
应该是说问题会发生在下一次相同资料写入的时候
作者: alog (A肉哥)   2014-11-21 12:46:00
简单作法 挑几个你认为不该重复的字段资料例如 name cellphone sexual然后你新增一个名为digest的资料字段 长度用32 char并设定他为 unique key接着你新增资料的时候 记得产生一组字串$digest = md5(json_encode(array($name,$cellphone,$sexual)));把这整组资料放进数据库里有重复的 数据库会自己挡下来
作者: LaPass (LaPass)   2014-11-21 13:06:00
unique key 我记得可以同时设在两个键上把两个字段当成一组,去判断两者都一样才当一样,这样
楼主: joedenkidd (优质的蓝色射手)   2014-11-21 19:39:00
alog大大说的,是一个好方式,db已有资料,以后可用~LaPass大大,unique key分别设定两个字段ok,但数据库中,id会重复,sn也会,所以只有那个条件在一起来能得到唯的一值,怪的只是不知道为什会发生这种问题
作者: xdraculax (首席怪叔叔)   2014-11-22 00:57:00
一楼就说啦,那个只数有更新,本来就=1就不算了mysql可以用replace into pg 不熟
作者: LaPass (LaPass)   2014-11-22 01:29:00
我的意思是,设定 id+sn unique这样,“两个一组”

Links booklink

Contact Us: admin [ a t ] ucptt.com