在我的PHP单元测试中,我使用的是SQLite内存数据库,其中包含下表:
CREATE TABLE "battlegroup_request" (
"id" INTEGER NULL PRIMARY KEY AUTOINCREMENT,
"battlegroupID" INTEGER NULL,
"inviterID" INTEGER NULL,
"inviteeID" INTEGER NULL
)
当我使用两个整数绑定执行以下查询时;
SELECT *
FROM "battlegroup_request"
WHERE "inviteeid" = ? AND
"inviter" IS NOT NULL AND
"battlegroupid" = ?
LIMIT 1
查询返回一个结果,但我希望它抛出错误,因为列inviter
不存在。这是SQLite的预期行为吗?我做错了吗?
我正在使用PDO,连接创建如下:
new PDO(
'sqlite::memory:',
null,
null,
array(
PDO::ATTR_CASE => PDO::CASE_LOWER,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
)
);
(这些选项是Laravel的默认选项,这是我们正在使用的框架。)
答案 0 :(得分:4)
如果你使用类似的东西:
SELECT "inviter" IS NOT NULL FROM battlegroup_request
如果列inviter
不存在,它将返回TRUE,因为SQLite会将"inviter"
视为字符串值(此处肯定不是NULL
)。
但是,如果你删除双引号:
SELECT inviter IS NOT NULL FROM battlegroup_request
如果列inviter
不存在,它将引发异常。
编辑:使用反引号也会强制SQLite将其视为名称(不是字符串):
SELECT `inviter` IS NOT NULL FROM battlegroup_request
如果列inviter
不存在,将引发异常。