php - 在两次fetchArray调用之间修改数据是否安全?

标签 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();
}

最佳答案

SQLite根据需要计算结果行,因此根据碰巧实现表扫描的方式,读取游标可能会丢失其在表中的确切位置,从而跳过某些行,或读取两次。

您可以在进行更新之前将所有值读入列表。

或者,register a user-defined function,以便您可以一次更新所有行:

$db->exec('UPDATE MyTable SET MyCol = MyFunction(MyCol)');

关于php - 在两次fetchArray调用之间修改数据是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50300473/

相关文章:

php - 避免 MySQL 注入(inject)替换单引号和双引号

php - 扩展 PHP Markdown 以接受 CSS 类名

android - 获取错误 : Caused by: android. database.sqlite.SQLiteException:接近 "TABLENAME"语法错误(代码 1)编译 SELECT 查询

c++ - 数据库连接对象的名称游标的历史记录是什么?

javascript - 从 mysql 刷新谷歌地图标记

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

SQL函数表插值

java - 无效的请求sqlite android

ios - iOS 中的 Sqlite 数据库锁定问题

php - 如何使用定义的范围将键输入数组?