使用CONCAT()的日志IP地址的MySQL更新问题

时间:2013-04-24 11:04:14

标签: php mysql

我正在制作简单的星级评分系统现在工作正常但是当谈到更新IP地址时,它给了我这样的痛苦......

我使用此查询创建了表

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()更新它,但它没有添加任何值。当我尝试在没有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'

3 个答案:

答案 0 :(得分:2)

在Windows7上,localhost解析为::1(您可以尝试在cmd中ping)。如果您通过localhost/somepage.php访问您的网页,请尝试127.0.0.1/somepage.php

答案 1 :(得分:2)

当字段为空时,可能更新失败时何时附加ipaddress,在这种情况下......

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

如果任何部分为null(null propogation),则concat将返回null,因此以下将产生null

select concat(null, 'hello') 

ifnull() function将使用第二个参数替换空的第一个参数

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

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

答案 2 :(得分:1)

使用函数CONCAT_WS(' ',field1,field2)代替CONCAT() ..