仅在DB中不存在数据时插入

时间:2015-04-30 15:39:37

标签: php mysql loops

我做了一些逻辑,将不存在的行值插入db,但是我失败了。这是部分代码:

 $existTitleArr = array();


 $sql = "SELECT title FROM list";
 $result = $db - > query($sql);

 if ($result - > num_rows > 0) {

     while ($row = $result - > fetch_assoc()) {
         $existTitleArr[] = $row['title'];
     }
 }

 $counter = 0;

 foreach($dom as $data) {

     if ($counter < 10) {

         if (isset($data - > find('.cname a', 0) - > plaintext)) {
             $title = $data - > find('.cname a', 0) - > plaintext;
         }

         $title = trim($title);

         if ($title != $existTitleArr[$counter]) {

             $stmt = $db - > prepare("INSERT INTO list(title) VALUES (?)");

             $stmt - > bind_param('s', $title);

             $stmt - > execute();
         }

         $counter++;

     }
 }

当我尝试删除其中一条记录并再次运行脚本时,上面的代码失败了(我以为我做了)。插入的行成为19而不是填充空槽,我不知道为什么。

我回显$title$existTitleArr[$counter],价值相同。

1 个答案:

答案 0 :(得分:1)

我只使用SQL查询INSERT INTO ... SELECT

来解决此问题
INSERT IGNORE INTO list (title) SELECT title FROM mainlist

但是,要使此查询起作用,您需要在标题上添加UNIQUE索引。我不知道你的头衔是否独一无二。

如果您的标题不是唯一的,我建议您在list中添加一个指向mainlist的外键,然后使用以下查询

INSERT IGNORE INTO list (id_mainlist, title) SELECT id, title FROM mainlist