程序: $keywords =trim($_REQUEST['keywords']);
if(!empty($keywords) && $keywords != L('SEARCH_KEYWORDS'))
{
$tablename = 'searchword_'.date("Ym",time());
$ip = get_client_ip();
$newsearch = M($tablename);
  $newsearch->searchword = $keywords;
  $newsearch->ip = $ip;
  $newsearch->create_time =  gmtTime();
  $newsearch->add();                        。
                        。插入数据
                   }
   
程序中判断了$keywords不为空时的插入数据,mysql数据库中怎么会有这个这个字段的空的数据,而且插入数据的ip大都来自同一个省?CREATE TABLE `sj_searchword_201011` (
  `id` int(11) NOT NULL auto_increment,
  `searchword` varchar(60) NOT NULL COMMENT '搜索关键词',
  `ip` varchar(20) NOT NULL COMMENT '用户ip',
  `create_time` int(11) unsigned NOT NULL COMMENT '搜索时间',
  PRIMARY KEY  (`id`),
  KEY `searchword` (`searchword`,`create_time`)
) ENGINE=MyISAM AUTO_INCREMENT=35051 DEFAULT CHARSET=utf8;  select *  from sj_searchword_201011 where searchword ="" order by id desc limit 10;
执行的结果:
+--------+------------+---------------+-------------+
| id     | searchword | ip            | create_time |
+--------+------------+---------------+-------------+
| 125730 |            | 124.115.0.104 |  1290588875 |
| 125729 |            | 124.115.0.161 |  1290588871 |
| 125722 |            | 124.115.0.170 |  1290588861 |
| 125717 |            | 124.115.4.199 |  1290588852 |
| 125715 |            | 124.115.0.18  |  1290588850 |
| 125713 |            | 124.115.0.19  |  1290588848 |
| 125708 |            | 124.115.0.16  |  1290588839 |
| 125703 |            | 124.115.0.102 |  1290588831 |
| 125702 |            | 124.115.4.204 |  1290588828 |
| 125696 |            | 124.115.4.190 |  1290588794 |
+--------+------------+---------------+-------------+

解决方案 »

  1.   

    你看看你的插入语句是不是将关键字当成了int类添加了.
       来自同一个省 可能是访问你网站的人 那个省的多吧.
      

  2.   

    关键字是varchar (60),是关键字为空的ip都来自这个省,其他的没有问题这是id倒序limit的数据
      +--------+------------+----------------+-------------+
    | id     | searchword | ip             | create_time |
    +--------+------------+----------------+-------------+
    | 126400 |            | 124.115.0.101  |  1290590366 |
    | 126399 | 餐        | 220.181.94.228 |  1290590360 |
    | 126398 |            | 124.115.0.16   |  1290590358 |
    | 126397 | ugg        | 123.185.67.232 |  1290590356 |
    | 126396 | 男 装    | 183.167.133.75 |  1290590355 |
    | 126395 | 鞋        | 125.33.73.44   |  1290590352 |
    | 126394 | 羽绒服  | 124.236.54.57  |  1290590351 |
    | 126393 | 鞋        | 58.251.31.64   |  1290590350 |
    | 126392 | 靴        | 218.2.115.162  |  1290590350 |
    | 126391 |            | 124.115.0.164  |  1290590350 |
    +--------+------------+----------------+-------------+
      

  3.   

    是不是插入的searchword 超过了60个字节,数据库把个''插入进去了。当然''不是空
      

  4.   

    mysql会有这个问题,插入的数据超过长度给变为''
    mssql会报错:
    消息 8152,级别 16,状态 14,第 1 行
    将截断字符串或二进制数据。
    语句已终止。
      

  5.   

    当数据空的时候 ip 字段不为空,说明sql 已经执行,没有报错
      

  6.   

    这个ip几乎平均3秒在你网站上查一次?是你自己的测试ip吧?或者你在写入判断语句之前的测试已经写入了这些数据造成了污染?
    ps:建议:清空所有keywords为空的数据,手动置为空测试
      

  7.   

    而且你说的只来自一个省的不太可靠,你可以sum(id)一下,只列出10条都是这一个省的ip就判定只有一个省,很不靠谱的
      

  8.   

    mysql> select count(*)as num  from sj_searchword_201011 where searchword ="";
    +------+
    | num  |
    +------+
    | 2854 |
    +------+
    1 row in set (0.01 sec)mysql> select count(*)as num  from sj_searchword_201011 where searchword ="" and ip like "124.115%";
    +------+
    | num  |
    +------+
    | 2740 |
    +------+
    1 row in set (0.02 sec)
      

  9.   

    124.115.0.*
    124.115.4.* 是来自soso 搜索引擎的ip