我想在我的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 ...
,但这对我也不起作用。
任何帮助将不胜感激!
修改
答案 0 :(得分:4)
如果使用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']"));