我需要执行搜索并替换表(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();
}
最佳答案
SQLite根据需要计算结果行,因此根据碰巧实现表扫描的方式,读取游标可能会丢失其在表中的确切位置,从而跳过某些行,或读取两次。
您可以在进行更新之前将所有值读入列表。
或者,register a user-defined function,以便您可以一次更新所有行:
$db->exec('UPDATE MyTable SET MyCol = MyFunction(MyCol)');
关于php - 在两次fetchArray调用之间修改数据是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50300473/