有一个奇怪的问题:
我可以从SQLite中过滤出非空的内容,但无法过滤出空的内容:
这个可以正常工作:
SELECT * FROM project WHERE parent_id NOT NULL;
这些不行:
SELECT * FROM project WHERE parent_id IS NULL;
SELECT * FROM project WHERE parent_id ISNULL;
SELECT * FROM project WHERE parent_id NULL;
所有返回值:
您的查询语法存在问题(查询未执行)...
更新:
我正在使用PHP通过ezSQl代码,并使用PHPLiteAdmin界面进行操作。
在PHPLiteAdmin演示版中,此表达式有效- 所以现在我怀疑我的PHP的SQLite版本是否有问题?是这样吗?这个表达式一直都有效吗?
更新2:
当我使用ezSQL从PHP运行代码时,PHP警告如下:
PHP警告:SQL逻辑错误或缺失数据库
有没有办法从PHP中获取更多信息?这太让人恼火、难以理解了,尤其是因为CLI中相同的语句可以正常工作...
更新3:
我唯一可能的线索是:我用PHP创建的数据库无法被CLI读取,反之亦然。我会得到:
错误:文件已加密或不是数据库
所以这里肯定有两种SQlite版本发生了冲突。(查看此处) 但是,为什么语句无效呢?
更新4:
好吧,我认为我已经找到了罪魁祸首,虽然不知道原因- 我使用PHP ezSQL创建的DB是“IS NULL”语句无法运行的数据库。如果我使用PHP的SQLite3类创建数据库,则该语句可以正常工作,而且我还可以从CLI访问该数据库,而ezSQL创建的数据库则会出现“文件已加密”的错误。
所以,我稍微研究了一下ezSQL代码- 发现它使用PDO方法而不是较新的SQLite3类。也许这就是问题所在- 我不想再浪费时间了...
无论如何,我已经找到了解决方案,那就是避免使用ezSQL,直接使用PHP的SQLite3类。
IS NULL
语法是正确的。在这种情况下,您需要告诉我们如何将该命令发送到SQLite。该错误消息似乎不是来自sqlite3命令行界面。 - Larry Lustig