我需要对表(MY_COL
)上的列(MY_TABLE
)执行搜索和替换。假设MY_COL
已编码,无法使用REPLACE
或UPDATE SET
进行修改。
在fetchArray
调用之间修改行是否安全,如下例所示?
$stmt = $db->prepare('SELECT ID, MY_COL FROM MY_TABLE');
$res = $stmt->execute();
while($row = $res->fetchArray(SQLITE3_ASSOC)) {
$new_col = $row['MY_COL'];
//modify new_col after decoding then re-encode it
$stmt2 = $db->prepare('UPDATE MY_TABLE SET MY_COL=:new_col WHERE ID=:id');
$stmt2->bindParam(':new_col', $new_col);
$stmt2->bindParam(':id', $row['ID']);
$stmt2->execute();
}
答案 0 :(得分:1)
SQLite根据需要计算结果行,因此根据表扫描的实现方式,读取游标可能会丢失其在表中的确切位置,并跳过某行,或者读取两次。
您可以在执行更新之前将所有值读入列表。
或者,{{3}}以便您可以一次更新所有行:
xy <- offsetps[names(na.omit(pts_sp == 1)), ]
plot(polygonsp, axes = 1, xlim = c(0, 10))
points(offsetps)
points(xy, col = "red")