看板 PHP 關於我們 聯絡資訊
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
alog: db資料是有更新才affected 不是你下完指令執行成功就算 11/21 11:10
alog: 如果你要避免部分資料進入資料庫 要做好檢查 11/21 11:11
alog: 適時配合lock相關指令做搭配 以及你要利用unique key避免重 11/21 11:12
alog: 複寫入 11/21 11:12
joedenkidd: 應該是說問題會發生在下一次相同資料寫入的時候 11/21 12:34
alog: 簡單作法 挑幾個你認為不該重複的欄位資料 11/21 12:46
alog: 例如 name cellphone sexual 11/21 12:47
alog: 然後你新增一個名為digest的資料欄位 長度用32 char 11/21 12:49
alog: 並設定他為 unique key 11/21 12:49
alog: 接著你新增資料的時候 記得產生一組字串 11/21 12:51
alog: $digest = md5(json_encode(array($name,$cellphone,$sexual 11/21 12:52
alog: ))); 11/21 12:52
alog: 把這整組資料放進資料庫裡 11/21 12:53
alog: 有重複的 資料庫會自己擋下來 11/21 12:54
LaPass: unique key 我記得可以同時設在兩個鍵上 11/21 13:06
LaPass: 把兩個欄位當成一組,去判斷兩者都一樣才當一樣,這樣 11/21 13:07
joedenkidd: alog大大說的,是一個好方式,db已有資料,以後可用~ 11/21 19:39
joedenkidd: LaPass大大,unique key分別設定兩個欄位ok,但資料庫 11/21 19:40
joedenkidd: 中,id會重復,sn也會,所以只有那個條件在一起來能 11/21 19:40
joedenkidd: 得到唯的一值,怪的只是不知道為什會發生這種問題 11/21 19:45
xdraculax: 一樓就說啦,那個只數有更新,本來就=1就不算了 11/22 00:57
xdraculax: mysql可以用replace into pg 不熟 11/22 01:10
LaPass: 我的意思是,設定 id+sn unique這樣,「兩個一組」 11/22 01:29