mysql 其中 inet_aton 喜欢 %...%
mysql where inet_aton like %...%
在我的数据库中,我将 IP (ipv4) 存储为 INET_ATON
<?php
$ip = mysqli_real_escape_string( $con, $_SERVER[ 'REMOTE_ADDR' ] );
mysqli_query( $con, "INSERT INTO table ( ip ) VALUES ( INET_ATON( '$ip' ) )" );
然后,要搜索 "normal ip" 我执行以下操作
SELECT * FROM table WHERE ip = INET_ATON ('31.165.84.4')
但是怎么只搜索一部分ip呢?例如:
SELECT * FROM table WHERE ip LIKE INET_ATON ('31.165.84') // not working
SELECT * FROM table WHERE ip LIKE INET_ATON ('%31.165.84%') // not working
这可能吗?
你可以使用反向功能INET_NTOA
你只有部分匹配('31.165.84')(缺少最后一位)
SELECT * FROM table WHERE INET_NTOA(ip) = '31.165.84.4'
您可以使用这样的查询:
SELECT *
FROM table
WHERE ip
BETWEEN INET_ATON('31.165.84.0')
AND INET_ATON('31.165.84.255');
测试
SELECT
if( INET_ATON('31.165.84.2') -- ip in Table
BETWEEN INET_ATON('31.165.84.0') -- Min Addr.
AND INET_ATON('31.165.84.255'),1,0); -- Max Addr.
样本
mysql> SELECT
-> if( INET_ATON('31.165.84.2')
-> BETWEEN INET_ATON('31.165.84.0')
-> AND INET_ATON('31.165.84.255'),1,0) as cmp;
+-----+
| cmp |
+-----+
| 1 |
+-----+
1 row in set (0,00 sec)
mysql>
mysql> SELECT
-> if( INET_ATON('31.165.84.177')
-> BETWEEN INET_ATON('31.165.84.0')
-> AND INET_ATON('31.165.84.255'),1,0) as cmp;
+-----+
| cmp |
+-----+
| 1 |
+-----+
1 row in set (0,01 sec)
mysql>
mysql> SELECT
-> if( INET_ATON('31.165.85.177')
-> BETWEEN INET_ATON('31.165.84.0')
-> AND INET_ATON('31.165.84.255'),1,0) as cmp;
+-----+
| cmp |
+-----+
| 0 |
+-----+
1 row in set (0,00 sec)
mysql>
在我的数据库中,我将 IP (ipv4) 存储为 INET_ATON
<?php
$ip = mysqli_real_escape_string( $con, $_SERVER[ 'REMOTE_ADDR' ] );
mysqli_query( $con, "INSERT INTO table ( ip ) VALUES ( INET_ATON( '$ip' ) )" );
然后,要搜索 "normal ip" 我执行以下操作
SELECT * FROM table WHERE ip = INET_ATON ('31.165.84.4')
但是怎么只搜索一部分ip呢?例如:
SELECT * FROM table WHERE ip LIKE INET_ATON ('31.165.84') // not working
SELECT * FROM table WHERE ip LIKE INET_ATON ('%31.165.84%') // not working
这可能吗?
你可以使用反向功能INET_NTOA
你只有部分匹配('31.165.84')(缺少最后一位)
SELECT * FROM table WHERE INET_NTOA(ip) = '31.165.84.4'
您可以使用这样的查询:
SELECT *
FROM table
WHERE ip
BETWEEN INET_ATON('31.165.84.0')
AND INET_ATON('31.165.84.255');
测试
SELECT
if( INET_ATON('31.165.84.2') -- ip in Table
BETWEEN INET_ATON('31.165.84.0') -- Min Addr.
AND INET_ATON('31.165.84.255'),1,0); -- Max Addr.
样本
mysql> SELECT
-> if( INET_ATON('31.165.84.2')
-> BETWEEN INET_ATON('31.165.84.0')
-> AND INET_ATON('31.165.84.255'),1,0) as cmp;
+-----+
| cmp |
+-----+
| 1 |
+-----+
1 row in set (0,00 sec)
mysql>
mysql> SELECT
-> if( INET_ATON('31.165.84.177')
-> BETWEEN INET_ATON('31.165.84.0')
-> AND INET_ATON('31.165.84.255'),1,0) as cmp;
+-----+
| cmp |
+-----+
| 1 |
+-----+
1 row in set (0,01 sec)
mysql>
mysql> SELECT
-> if( INET_ATON('31.165.85.177')
-> BETWEEN INET_ATON('31.165.84.0')
-> AND INET_ATON('31.165.84.255'),1,0) as cmp;
+-----+
| cmp |
+-----+
| 0 |
+-----+
1 row in set (0,00 sec)
mysql>