2013-04-24 81 views
0

我創建簡單的星級評級系統現在事情都工作正常,但是當涉及到更新它給了我現在這樣的痛苦IP地址..MySQL的更新問題與日誌IP地址使用CONCAT()

我創建使用此查詢

return 'CREATE TABLE star_ratings ('. 
    'id INT (11) NOT NULL AUTO_INCREMENT PRIMARY KEY,'. 
    'post_id INT (11),'. 
    'rating FLOAT (11) DEFAULT 0,'. 
    'total_rating FLOAT (11) DEFAULT 0,'. 
    'total_rates INT (11) DEFAULT 0,'. 
    'ipaddress LONGTEXT'. 
'); 

檢查圖像的IP地址列表

enter image description here

現在嘗試使用進行更新但它沒有添加任何值。並且當我嘗試更新時沒有CONCAT()而不是更新值時進行調試。我只是想知道這是不是在工作,我錯了。

其他事情,如果你在ipaddress欄通知我越來越怪異ipaddress::1,而不是像127.1.1.1

這裏是我的更新查詢

UPDATE star_ratings 
SET rating = '$rating', 
total_rating = '$total_rating', 
total_rates = '$total_rates', 
ipaddress = CONCAT(ipaddress, ',$ipaddress') 

WHERE post_id = '$post_id' 
+0

':: 1'是IPV6等效127.0.0.1的。在你的例子中'$ ipaddress'來自哪裏? – 2013-04-24 11:08:14

+0

我在本地工作..我的意思是開發環境 – 2013-04-24 11:27:11

回答

2

也許更新失敗時追加ip地址時,字段爲空入手,在這種情況下...

UPDATE star_ratings 
SET rating = '$rating', 
total_rating = '$total_rating', 
total_rates = '$total_rates', 
ipaddress = CONCAT(ifnull(ipaddress,''), ',$ipaddress') 

CONCAT會返回null如果任何部分爲空(NULL傳播史),所以下面就產生空

select concat(null, 'hello') 

ifnull() function將取代空第一個參數與所述第二PARAM

select ifnull(null,'hello') => 'hello' 

select ifnull('hi','hello') => 'hi' 
+0

這很酷的解決問題...只是爲了知識,你可以解釋一下這個區別嗎? – 2013-04-24 11:30:14

+0

更新回答以及ifnull的簡要說明 – 2013-04-24 11:38:35

+0

現在明白了..非常感謝 – 2013-04-24 11:39:27

2

在Windows7的本地主機解析爲::1(你可以嘗試ping以cmd計)。如果您通過localhost/somepage.php訪問您的頁面,請試用127.0.0.1/somepage.php

+0

好的提示非常感謝.. – 2013-04-24 11:31:40

+0

不客氣。只有在昨天才能看出來,這可能就是爲什麼它響了! =) – ljubiccica 2013-04-24 11:35:51

1

使用功能CONCAT_WS(' ',field1,field2)代替CONCAT() ..