さて、最近SQLiteを読んで作業しています(ここの誰かが実際にそれを提案しました)。
それは私が必要とするもの、つまりインメモリデータベースに最適です。しかし、私が抱えている問題は、それらがここに重複するレコードであるため、レコードを挿入することでしたが、すでに存在する場合は、欠落しているフィールドに入力するだけです。
今私が試した最初の方法は、idを主キーとして設定し、INSERTORREPLACEをに設定することでした。これに関する問題は、以前のコンテンツが消去されていたことでした。
したがって、現在行っているのは更新クエリです。変更された行数をチェックしています。1未満の場合は、挿入クエリを実行します(これには余分なオーバーヘッドがあることがわかっているので、共有するより良い方法がある場合)。
とにかく私の問題は(最後に)..更新クエリを使用しても、レコードがnull値で上書きされていることです。
以下のコードスニペットを要約しました。
$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ループ内で行われています。
とにかく、コンテンツがすでにデータベースにある場合は、コンテンツの上書きを停止します。したがって、更新時にフィールドがnullの場合は、新しいコンテンツを追加します。すでに何かが含まれている場合は、変更せずに次のフィールドに移動します。SQLiteで使用できるIFNULLについて読みましたが、PDOプリペアドステートメント内でそれをどのように使用するかわかりません。
ヘルプ、ガイダンス、例をいただければ幸いです:)
psImはSQLiteでPHP5を使用しています