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

看板PHP作者 (優質的藍色射手)時間11年前 (2014/11/21 10:57), 編輯推噓7(7016)
留言23則, 4人參與, 最新討論串1/2 (看更多)
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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.169.170.134 ※ 文章網址: http://www.ptt.cc/bbs/PHP/M.1416538648.A.274.html

11/21 11:10, , 1F
db資料是有更新才affected 不是你下完指令執行成功就算
11/21 11:10, 1F

11/21 11:11, , 2F
如果你要避免部分資料進入資料庫 要做好檢查
11/21 11:11, 2F

11/21 11:12, , 3F
適時配合lock相關指令做搭配 以及你要利用unique key避免重
11/21 11:12, 3F

11/21 11:12, , 4F
複寫入
11/21 11:12, 4F

11/21 12:34, , 5F
應該是說問題會發生在下一次相同資料寫入的時候
11/21 12:34, 5F

11/21 12:46, , 6F
簡單作法 挑幾個你認為不該重複的欄位資料
11/21 12:46, 6F

11/21 12:47, , 7F
例如 name cellphone sexual
11/21 12:47, 7F

11/21 12:49, , 8F
然後你新增一個名為digest的資料欄位 長度用32 char
11/21 12:49, 8F

11/21 12:49, , 9F
並設定他為 unique key
11/21 12:49, 9F

11/21 12:51, , 10F
接著你新增資料的時候 記得產生一組字串
11/21 12:51, 10F

11/21 12:52, , 11F
$digest = md5(json_encode(array($name,$cellphone,$sexual
11/21 12:52, 11F

11/21 12:52, , 12F
)));
11/21 12:52, 12F

11/21 12:53, , 13F
把這整組資料放進資料庫裡
11/21 12:53, 13F

11/21 12:54, , 14F
有重複的 資料庫會自己擋下來
11/21 12:54, 14F

11/21 13:06, , 15F
unique key 我記得可以同時設在兩個鍵上
11/21 13:06, 15F

11/21 13:07, , 16F
把兩個欄位當成一組,去判斷兩者都一樣才當一樣,這樣
11/21 13:07, 16F

11/21 19:39, , 17F
alog大大說的,是一個好方式,db已有資料,以後可用~
11/21 19:39, 17F

11/21 19:40, , 18F
LaPass大大,unique key分別設定兩個欄位ok,但資料庫
11/21 19:40, 18F

11/21 19:40, , 19F
中,id會重復,sn也會,所以只有那個條件在一起來能
11/21 19:40, 19F

11/21 19:45, , 20F
得到唯的一值,怪的只是不知道為什會發生這種問題
11/21 19:45, 20F

11/22 00:57, , 21F
一樓就說啦,那個只數有更新,本來就=1就不算了
11/22 00:57, 21F

11/22 01:10, , 22F
mysql可以用replace into pg 不熟
11/22 01:10, 22F

11/22 01:29, , 23F
我的意思是,設定 id+sn unique這樣,「兩個一組」
11/22 01:29, 23F
文章代碼(AID): #1KRgeO9q (PHP)
討論串 (同標題文章)
文章代碼(AID): #1KRgeO9q (PHP)