Хорошо, я недавно читал и работал с SQLite (кто-то здесь предлагал это на самом деле).
Он прекрасно работает для того, что мне нужно - базы данных в памяти.Однако проблема, с которой я столкнулся, состоит в том, что они являются дублирующими записями, поэтому я хотел вставить запись, но если она уже существует, просто заполните пропущенные поля.
Теперь первый метод, который я попробовал, былустановка идентификатора в качестве первичного ключа и вставка или замена в.Проблема с этим заключалась в том, что предыдущее содержимое было уничтожено.
Итак, что я сейчас делаю, так это запрос на обновление.Я их проверяю, сколько строк изменилось.если его значение меньше 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.
Является ли их в любом случаеостановите перезаписывание контента, если он уже есть в БД.Поэтому, если в обновлении поле пустое, добавьте новый контент, если в нем уже есть что-то, оставьте его без изменений и перейдите к следующему полю.Я читал о IFNULL, который можно использовать в SQLite, но я не уверен, как я использую это в своих подготовленных PDO инструкциях.
Буду признателен за любую помощь, руководство, примеры:)
ps Я использую PHP5 с SQLite