我正在尝试创建一个系统(以及它是一个项目),我可以在这些系统执行某些活动时记录用户的IP地址。经过一番研究,我发现需要ip2long才能转换成数据库。我有一个名为ips(unsigned)的数据库,主列是ip和count。
Mysql屏幕截图:
这就是我目前所拥有的:
$ip=$_SERVER['REMOTE_ADDR'];
$ip = ip2long($ip);
$stmt = $DB_con->prepare("INSERT INTO ips (ip, count) VALUES (:addr, 1) ON DUPLICATE KEY UPDATE count = count + 1");
$stmt->bindparam(":addr", $ip);
$stmt->execute();
这很好用。但我似乎无法从数据库中检索值并显示它们。我可能做错了但却不知道。在此声明之后,我需要转换longtoip。我感谢一些帮助,因为这只给了我一个错误500:
$stmt = $DB_con->prepare("SELECT ip , count FROM ips WHERE 1")
$stmt->execute();
答案 0 :(得分:4)
以下查询没有任何问题,您可以从查询下面的SQL Fiddle链接中看到:
SELECT ip, count FROM ips WHERE 1
但是,如果您确实打算将COUNT
用作函数,那么您的查询需要GROUP BY
子句:
SELECT ip, COUNT(*) AS ipCount
FROM ips
GROUP BY ip
作为一般的良好实践,您可能希望避免命名列count
,或者在任何其他MySQL函数之后,因为它可能会导致您的查询实际执行的内容混淆(并且您可能已经成为这个你自己)。