在MySQL中获取客户端IP地址

30
我想用一条简单的 SQL 语句获取客户端的 IP 地址,不想使用 PHP 或其他技术,只想用纯 SQL。但当我使用
SELECT USER();

我明白了

dbouser@host.i.do.not.care.of
当我使用


SELECT CURRENT_USER();

我理解了

dbouser@%

但是如何获取纯IP地址呢?非常感谢您提前的帮助。

5个回答

56

您将仅获得与MySQL通信的客户端进程的IP地址。假设这是您想要的:

select host from information_schema.processlist WHERE ID=connection_id();

将为您提供当前连接到 MySQL 服务器的主机名(如果未启用名称解析,则为 IP 地址,通常情况下是不启用的)。


感谢MarkR的快速回答。不幸的是,我正在使用权限有限的托管服务器进行工作。我无法访问“information_schema.processlist”。 - DaJunkie
information_schema.processlist不需要特权才能访问。他们必须使用被黑客攻击或非常旧的MySQL版本。 - MarkR

10

仅获取IP地址,不包含端口号。

select SUBSTRING_INDEX(host,':',1) as 'ip' from information_schema.processlist WHERE ID=connection_id();


5

@mvf - 你可以不用reverse,而改为:

SELECT SUBSTRING_INDEX(USER(), '@', -1) AS ip;

这应该是最好的答案! - mvorisek

4
SELECT REVERSE(SUBSTRING_INDEX(REVERSE(USER()),'@',1)) as ip;
SELECT SUBSTRING(USER(), LOCATE('@', USER())+1) as ip;

user() 函数也是一个不错的解决方案。 - Dawid Ohia

0

或许可以使用这个代码从客户端获取IP地址,然后将其插入到表中:$ip = $_SERVER['REMOTE_ADDR'];


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接