在我的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的默认值,这是我们正在使用的框架。)
参考方案
如果您使用类似:
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
不存在,将引发异常。
Improve this question 我有一个包含数百个动态生成文件夹的根目录。随着时间的流逝,在这些目录必须为空的情况下,需要从系统中删除其中一些文件夹。实现这一目标的最佳的最短,最简单和/或最有效的方法是什么? 参考方案 使用glob:if (count(glob("path/*")) === 0 ) { // empty gl…
如何从php中获取datatables jQuery插件的json数据 - php我是PHP的新手,正在尝试使用Datatables jQuery插件。我知道我必须从.php文件中获取数据,然后在数据表中使用它,但是我似乎无法通过ajax将其传递给数据表。我设法从数据库中获取数据,并对其进行json编码,但是后来我不知道如何在我的index.php文件中调用它,并在其中显示它。我究竟做错了什么?这是我的代码:HTML(已编辑): <…
PHP str_replace是否具有大于13个字符的限制? - php直到击中第13个字符为止。一旦str_ireplace在cyper数组中击中“ a”,str_ireplace就停止工作。数组的大小有限制吗?请记住,如果键入“ abgf”,我会得到“ nots”,但是如果键入“ abgrf”,我应该得到“ notes”,那么我就会得到“ notrs”。机架使我的大脑无法解决。$_cypher = array("n…
PHP-MySQL结果转换为JSON - php我试图了解如何将MySQL结果转换为JSON格式,以便以后可以在Javascript中使用此JSON来构建HTML表。但是我的代码只是产生大量的空值,我还不明白为什么。$result = mysqli_query($con, "SELECT * FROM Customers"); $test = json_encode($result);…
PHP Count数组元素 - php嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…