在 MySQL 查询中:
SELECT host
FROM information_schema.processlist
WHERE ID = connection_id( )
LIMIT 0 , 30
这个查询的结果是:localhost
。
SELECT @@hostname;
这个查询的结果是:localhost
。
但我需要获取像192.168.1.2
这样的 IP 地址。
问题:如何使用 MySQL 查询获得此结果?
在 MySQL 查询中:
SELECT host
FROM information_schema.processlist
WHERE ID = connection_id( )
LIMIT 0 , 30
这个查询的结果是:localhost
。
SELECT @@hostname;
这个查询的结果是:localhost
。
但我需要获取像192.168.1.2
这样的 IP 地址。
问题:如何使用 MySQL 查询获得此结果?
Select SUBSTRING_INDEX(host,':',1) as 'ip'
From information_schema.processlist
WHERE ID=connection_id();
查询语句为:
select host from information_schema.processlist WHERE ID=connection_id();
此查询将返回主机名。如果未启用名称解析,则通常会获得IP地址(例如 192.168.1.2.
)。
通过这个文章和它强大的分割函数,你可以像这样重写它:
Select user,CONCAT(Split_fn(host, "-", 2),'.',Split_fn(host, "-", 3),'.',Split_fn(host, "-", 4),'.',Split_fn(Split_fn(host, "-", 5),".",1)) as Ip_Address from information_schema.PROCESSLIST where ID = CONNECTION_ID()
localhost:52321
,因此不能在任何“-”或“.”字符处拆分。 - Philipp我发现许多MySQL服务器使用BIND_ADDRESS
全局变量。该变量返回服务器侦听的IP地址。然而,在我的测试中,这个值通常是“127.0.0.1”。
SHOW VARIABLES LIKE 'HOSTNAME'; -- Returns: MyHostName
SHOW VARIABLES LIKE 'BIND_ADDRESS'; -- Returns: 127.0.0.1
替代语法:
SELECT @@hostname, @@bind_address; -- Returns: MyHostName, 127.0.0.1
注意:
这并不是一个万无一失的解决方案。根据服务器配置,关键字BIND_ADDRESS
(或@@bind_address
)也可能返回值*
。
$_SERVER['REMOTE_ADDR'];
这是一种存储 IP 地址的表格吗?我认为你的查询是寻找主机,而不是 IP。但我不确定是否正确理解了你的意思。