[請益] 資料重複寫入問題?

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