【问题标题】:php query error sqlite near where syntax errorphp查询错误sqlite靠近where语法错误
【发布时间】:2015-09-11 00:45:03
【问题描述】:

嗨,我是 sqlite 的新手,我正在尝试使用 php 对 sqlite 数据库执行查询,但是 **出现语法错误**的附近

这是查询:

"
  INSERT  INTO selectedObject ( museum , atwork , beaconCode , qrCode)
  VALUES ('".$museo."','" .$opera."','".$codiceBeacon."', '".$codice_qr_random."')
  WHERE NOT EXISTS(
                    SELECT museum , atwork
                    FROM selectedObject
                    WHERE museum = '".$museo."' AND atwork = '".$opera."'

                  )";

怎么了?

【问题讨论】:

  • 我尝试在没有嵌套查询的情况下修改代码,它可以工作!我该如何解决?
  • 一个insert 没有where 子句
  • 当我将该行放入数据库时​​,如果该行不存在,是否可以放入该行?
  • @juergend - SQLite 确实支持这种语法
  • 但是,如果您使用 SQLite,为什么要标记这个问题 MySQL

标签: php sqlite


【解决方案1】:

Sqlite 支持复合主键,所以我从这个link 的手册中展示了这一点:

CREATE TABLE 命令指定新的以下属性 表:

...

表的主键(可选)。都是单身 支持列和复合(多列)主键。

根据您的唯一键、主键或其他键、复合键或其他键,您可以使用 OR IGNORE 的 sqlite 功能忽略 duplicate clash 后跟更新语句。

所以它会变成:

INSERT OR IGNORE INTO selectedObject ( museum , atwork , beaconCode , qrCode)
  VALUES ('".$museo."','" .$opera."','".$codiceBeacon."', '".$codice_qr_random."');

并且(可能)后跟update 无论如何。

我为什么说不管?因为如果 INSERT 由于唯一键冲突而失败,它会静默失败。但该失败可能是由于单列唯一索引或两列的组合,但您希望设置第 3 列和第 4 列。因此,更新会将其全部清除并确保该行存在。

如果需要,我会让您考虑您的用例和更新声明。

duplicate clash 表示您已告知数据库强制唯一性,无论是单列还是复合(列组合)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2020-04-07
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多