我做了一些逻辑,将不存在的行值插入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]
,价值相同。
答案 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