数据库member:
id ip
1 110.251.123.139
2 120.7.251.196
3 183.67.34.189
4
……因为需要,数据库中必须记录了完整的IP但现在要取表中IP段前二位与现有黑名单IP的前二段(如118.15或183.67)比对是否相同请高手帮写出代码,谢谢!
id ip
1 110.251.123.139
2 120.7.251.196
3 183.67.34.189
4
……因为需要,数据库中必须记录了完整的IP但现在要取表中IP段前二位与现有黑名单IP的前二段(如118.15或183.67)比对是否相同请高手帮写出代码,谢谢!
解决方案 »
- 怎样测试是否成功配置apache和php协同工作?
- php如何打印页面并判断是否打印成功(打印机),我用window.print()!但是这个函数没有返回值
- [求助]如何取得一个多维数组的结构
- 当在一个类中用 preg_replace 碰上了 $this时,悲剧发生了,请高手帮帮忙。
- php连接mssql2000
- 使用 mb_substr 时如何追加省略号?
- 这个是怎么回事?请大家帮忙
- php编译出错
- 我的php5,能用SSL加密解密,但是用https不能用,请高手指点
- curl采集时目标URL时302的问题
- PHP、mysql、apache单独装和Xampp的区别何在
- php中序列化函数,json函数分别在什么时候用?想听下各位的经验之谈
$r25=$obj_db->simplequery($q25);
$tx_list25="";
while ($a25=$obj_db->fetchrow($r25,DB_FETCHMODE_ASSOC))
{
$a25ip=explode(".",$a25[ip]);
$arr25ip="$a25ip[0].$a25ip[1]";//取IP前二位
$tx_list25.="$arr25ip,";
}
$tx_list25=substr($tx_list25,0,-1);
$bhei = array("$tx_list25");//数据库中的IP前二段
$new_array = array(127.0,192.168);//比对数据库中IP的前二段是否与这二个IP段相同
$sj=0;
foreach($new_array as $item)
{
if(in_array($item,$bhei))
{
$sj=1;
break;
}}echo "$sj";//$sj=1,有相同的IP段,$sj=0,没有相同的IP段
=======================请高手帮忙修正错误,或者用更简洁的代码达到效果,谢谢!
mysql 手册中有
SUBSTRING_INDEX(str,delim,count)
返回字符串 str 中在第 count 个出现的分隔符 delim 之前的子串。如果 count 是一个正数,返回从最后的(从左边开始计数)分隔符到左边所有字符。如果 count 是负数,返回从最后的(从右边开始计数)分隔符到右边所有字符:
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'这个函数是多字节安全的。
至少要写作
select * from member where ip like '118.15.%';
select * from member where SUBSTRING_INDEX(ip, '.', 2) in ('118.15', '183.67');
-----------------------------------------------
这个就不错了,如果ip字段建有索引,这条语句除非118.15.*的条目太多,基本会做索引扫描
like '..%' 可以