插入或替换 ROWID 导致错误的位置



以下代码:

$stm = $sql->prepare('INSERT OR REPLACE INTO "vehicle_service_invoice" (
        invoice, "date", unit, odometer, sublet, sub, po, categories
    ) VALUES (
        :invoice, :date, :unit, :odometer, :sublet, :sub, :po, :categories
    ) WHERE rowid = :rowid;'
);
$stm->bindParam(':invoice', $_POST['invoice']);
$stm->bindParam(':date', $_POST['date']);
$stm->bindParam(':unit', $_POST['unit']);
$stm->bindParam(':odometer', $_POST['odometer']);
$stm->bindParam(':sublet', $_POST['sublet']);
$stm->bindParam(':sub', $_POST['sub']);
$stm->bindParam(':po', $_POST['po']);
$stm->bindParam(':categories', $categories);
$stm->bindParam(':rowid', $_POST['rowid']);
$stm->execute();

生成以下查询:

INSERT OR REPLACE INTO "vehicle_service_invoice" (
    invoice,
    "date",
    unit,
    odometer,
    sublet,
    sub,
    po,
    categories
) VALUES (
    7230,
    '2013-02-07',
    558,
    34863,
    0,
    0,
    1486347,
    5
) WHERE rowid = 1

这将产生以下错误:

ERROR: near "WHERE": syntax error.


我试图做的是为我的INSERTUPDATE逻辑都遵循一条路径,所以在我发现我可以做INSERT OR REPLACE之后,我想我可以根据每个项目的ROWID更新信息。对我来说,语法看起来是正确的,我做错了什么?

应该注意的是,我不关心更改ROWID值,因为我知道这是做INSERT OR REPLACE陈述的绊脚石。所有内容都基于INVOICE列在其他查询中联接在一起。我只想使用 ROWID 来引用该行。

在 INSERT 语句中,WHERE 子句没有意义。

插入

或替换的工作方式如下:将具有指定值的记录插入到表中。如果这会导致违反 UNIQUE 约束,则会删除记录。

若要替换可能已存在的记录,标识该记录的列必须是要插入的值的一部分。换句话说,您必须插入rowid值:

INSERT OR REPLACE INTO vehicle_service_invoice(rowid, ...) VALUES (1, ...)

最新更新