我写的过程是这样的,循环读取数组,判断数据是否添加过,如果没有添加就继续下面的代码
我感觉我这个过程是正确的啊,但是就是有时候会出去重复写入是我哪里没有考虑到吗?比如说刚写入的数据会查询不到?foreach($title as $value){ //开始循环处理
if (!art_overlap($value) continue;  //判断数据库中是否已经有这个数据,有了就跳到下一个 //下边还有一些写入数据库的代码,我就不发上来了
}
下边是判断是否重复的代码,这个代码是没有问题的,大部分情况下都正常,但有时会连着把同一个标题写入两次,而且是连着好几个内容都是重复写入
function art_overlap($key){                //判断文章(标题)是否重复,重复返回false
global $db;
$sql = "select id from art_table where title = '".$key."'";
$rs = $db->query($sql);
if ($row = $db->fetch_array($rs)){
return false;
}
return true;
}

解决方案 »

  1.   

    $sql = "select id from art_table where title = '".$key."'";
    这里会不会出现id为空的现象,建议改为
    $sql = "select count(1) as total from art_table where title = '".$key."'";
    去判断count的值应该会更准确一点,另外如果title是不能重复的,可以考虑设为主键或者唯一索引
      

  2.   

    ID是不会为空的,而且我只是给出了一部分代码,后边还有判断其他的,现在让我十分郁闷的是
    $title 这个数组里应该是不会含有那么多重复的数据
    所以我纳闷,难道 foreach 没有继续下一个?
      

  3.   


    function art_overlap($key){                //判断文章(标题)是否重复,重复返回false
        global $db;
        $sql = "select id from art_table where title = '".$key."'";
        $rs = $db->query($sql);
        $row = $db->fetch_array($rs);
        var_dump($row);//打印一下
        if ($row = $db->fetch_array($rs)){// 如果存在的title对应的id为空或者为0 还成立么 
            return false;
        }
        return true;
    }
      

  4.   

    if (!art_overlap($value) continue; if (!art_overlap($value)) continue; 还有半边括号呢??
      

  5.   

    不是括号的问题,这是我贴上来时候的失误
    另外我感觉是foreach那出的问题,因为总是连着写入两次,title数组里是不应该连着出现两个相同的内容的让我恼火的是这个问题不是每次都出,没发调试。我看看加锁有没有用