如果行不存在且具有相同的值,则插入该行

时间:2016-07-21 09:38:25

标签: php mysql sql

我想在我的MySQL表 kh_comments 中插入一个新行,但只有在不存在具有相同值的行时才应插入它。

这是我尝试的方式,我知道这是完全错误的:

public function prepare($author, $arr) {
    $conn = new mysqli($this->servername, $this->username, $this->password, $this->db_name);

    foreach ($arr as $value) {

        $stmt = $conn->prepare("INSERT INTO kh_comments WHERE NOT EXISTS (author, abstract) VALUES (?, ?)");
        $stmt->bind_param("ss", $author, $value['id']);
        $stmt->execute();

        $stmt->close();
        $conn->close();
    }
}

我也尝试使用INSERT IGNORE INTO ...,但这对我也不起作用。

任何帮助将不胜感激!

修改

这是我的表格的样子: enter image description here 在我的SQL代码中,我没有定义ID。那还需要吗?如果是这样,那么SQL的外观如何呢?

3 个答案:

答案 0 :(得分:4)

Use INSERT IGNORE

  

如果使用IGNORE关键字,则执行时会出现错误   INSERT语句被忽略。例如,没有IGNORE,就是一行   复制表中的现有UNIQUE索引或PRIMARY KEY 值   导致重复键错误,语句被中止。同   IGNORE,该行被丢弃,不会发生错误。忽略错误可能   虽然重复键错误没有,但生成警告。

$stmt = $conn->prepare("INSERT IGNORE INTO kh_comments(author,abstract) VALUES (?, ?)");

$stmt->bind_param("ss", $author, $value['id']);
$stmt->execute();

$stmt->close();
$conn->close();

请注意,要成功使用此方法(或REPLACE INTO方法甚至ON DUPLICATE KEY方法),您需要在不希望重复的字段上使用唯一索引。如上文文档摘录中所述

答案 1 :(得分:1)

您可以使用static uint8_t data_array[20] = "ABC"; static uint8_t s[4] = "ABC"; static uint8_t length = 3; uint8_t bool = 1; for (int i = 0; i < length; i++) { if (s[i] != data_array[i]) { bool = 0; break; } } if (bool) { printf("pattern found\n"); }

正如documentation所说:

  

REPLACE的工作原理与INSERT完全相同,只是如果在一个旧行中   table与PRIMARY KEY或UNIQUE的新行具有相同的值   index,在插入新行之前删除旧行。

答案 2 :(得分:0)

$check  = mysql_num_row(mysql_query("select * from  kh_comments where author  =    $auther   and  abstract=$value['id']"));