Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php和mysql中使用IPs_Php_Mysql_Pdo - Fatal编程技术网

在php和mysql中使用IPs

在php和mysql中使用IPs,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试创建一个系统,这是一个可以记录用户在执行某些活动时的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) O

我正在尝试创建一个系统,这是一个可以记录用户在执行某些活动时的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();

下面的查询没有问题,从查询下面给出的SQL FIDLE链接可以看出:

SELECT ip, count FROM ips WHERE 1
但是,如果确实打算将COUNT用作函数,则查询需要GROUP BY子句:


作为一般的良好实践,您可能希望避免以列计数或任何其他MySQL函数命名,因为这可能会导致对您的查询实际执行的操作的混淆,并且您自己也可能会遇到这种情况。

以下查询没有错,从下面给出的查询的SQL FIDLE链接中可以看到:

SELECT ip, count FROM ips WHERE 1
但是,如果确实打算将COUNT用作函数,则查询需要GROUP BY子句:


作为一般的良好实践,您可能希望避免以列计数或任何其他MySQL函数命名,因为这可能会导致对您的查询实际执行的操作的混淆,并且您自己也可能会遇到这种情况。

您的错误500可能来自DB级别的错误。您能否在执行后添加$stmt->errorInfo以了解追加的内容?但我认为这是因为count是一个MySQL关键字,需要转义:选择ip,`count`……1不是一个条件。你想查询什么?count是一个保留工作它是一个函数,但是你调用它时没有任何参数试图查询所有IP地址和它们的计数。ipv6呢?这是IPv6越来越广泛使用时需要考虑的问题。ip2long仅支持IPv4。出于日志记录的目的,我看不出IP转换的意义,只是将其存储为字符串。您的错误500可能来自DB级别的错误。您能否在执行后添加$stmt->errorInfo以了解追加的内容?但我认为这是因为count是一个MySQL关键字,需要转义:选择ip,`count`……1不是一个条件。你想查询什么?count是一个保留工作它是一个函数,但是你调用它时没有任何参数试图查询所有IP地址和它们的计数。ipv6呢?这是IPv6越来越广泛使用时需要考虑的问题。ip2long仅支持IPv4。出于日志记录的目的,我不认为IP转换有什么意义,只是将其存储为字符串。COUNT是MySQL中的保留关键字,而不是。仅供参考:手册状态-允许将内置函数的名称作为标识符,但可能需要谨慎使用。例如,COUNT作为列名是可以接受的。但是,默认情况下,函数名和以下“”字符之间的函数调用中不允许有空格@弗雷德二世-你说得对,我没有意识到这一点。我查了一下自己的名字,事实上count是一个合法的列名,甚至没有被替换。OP犯下的500个错误让我走上了这条路,寻求解释,但似乎是其他问题导致了它。我将把使用计数作为函数的讨论留在GROUP BY中,因为我相信这是正确的-COUNT是MySQL中的一个保留关键字-它不是。仅供参考:手册状态-允许将内置函数的名称作为标识符,但可能需要谨慎使用。例如,COUNT作为列名是可以接受的。但是,默认情况下,函数名和以下“”字符之间的函数调用中不允许有空格@弗雷德二世-你说得对,我没有意识到这一点。我查了一下自己的名字,事实上count是一个合法的列名,甚至没有被替换。OP犯下的500个错误让我走上了这条路,寻求解释,但似乎是其他问题导致了它。我将把使用计数作为函数的讨论留在GROUP BY中,因为我相信这是正确的-