在fetchArray调用之间修改数据是否安全?

时间:2018-05-11 21:25:40

标签: php sqlite

我需要对表(MY_COL)上的列(MY_TABLE)执行搜索和替换。假设MY_COL已编码,无法使用REPLACEUPDATE 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();
}

1 个答案:

答案 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")