好的,所以我最近一直在阅读和使用 SQLite(实际上有人在这里提出了建议)。
它非常适合我需要的东西 - 一个内存数据库。然而,我遇到的问题是它们在这里是重复的记录,所以我想做的是插入记录,但如果它已经存在,那么只需填写缺失的字段。
现在我尝试的第一种方法是将 id 设置为主键并插入或替换。这个问题是以前的内容被清除了。
所以我现在做的是更新查询。我正在检查更改的行数。如果它低于 1,那么我运行插入查询(如果有更好的方法共享,因为我知道这有额外的开销)。
无论如何,我的问题(最后)..是即使使用更新查询,记录也被空值覆盖。
我已经压缩了下面的代码片段:
$stmt1 = $db->prepare("UPDATE results SET
field1=?, field2=?, field3=?
WHERE id=?
");
$stmt1->execute(array(
$elm['content1'], $elm['content2'], $elm['content3'], $elm['id']
));
$count = $stmt1->rowCount();
if ($count < 1) {
$stmt2 = $db->prepare("INSERT INTO results (id, field1, field2, field3)
VALUES (:id,:field1, :field1, :field1 )
");
$stmt2->execute(array(":id" => $recordID, ":field1" => $elm['content1'], ":field2" => $elm['content2'], ":field3" => $elm['content3']));
}
以上是在 foreach 循环中进行的。
如果内容已经在数据库中,他们是否会阻止内容被覆盖。因此,如果在更新时该字段为空,则添加新内容,如果其中已经包含某些内容,则保持不变并继续下一个字段。我已经阅读了可以在 SQLite 中使用的 IFNULL,但我不确定如何在我的 PDO 准备语句中使用它。
任何帮助、指导、示例将不胜感激:)
ps 我在 SQLite 中使用 PHP5