Вот странный пример:
Я могу фильтровать по NOT NULLS
из SQLite, но не NULLS
:
Это работает:
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;
All return:
Возникла проблема с синтаксисом вашего запроса (Запрос не былвыполнено) ...
ОБНОВЛЕНИЕ :
Я делаю это с помощью PHP - через мой код с ezSQl и с использованием PHPLiteAdmin interface
Используя демонстрацию PHPLiteAdmin , это выражение работает, так что теперь я подозреваю, что проблема с версией SQLite моего PHP?Может ли это быть?Разве это выражение не всегда корректно?
ОБНОВЛЕНИЕ 2 :
Когда я запускаю код из PHP с использованием ezSQL, предупреждение PHP:
PHP Предупреждение: ошибка логики SQL или отсутствует база данных
Есть ли способ получить больше информации из PHP?Это поразительно непрозрачно и странно, особенно потому, что одно и то же утверждение в CLI работает нормально ...
ОБНОВЛЕНИЕ 3
Единственная другая возможная подсказка, которую я имею, состоит в том, чтобазы данных, которые я создаю с помощью PHP, не могут быть прочитаны CLI, и наоборот.Я получаю:
Ошибка: файл зашифрован или не является базой данных
Так что здесь определенно есть две разновидности SQlite.( См. Это ) Тем не менее, почему недействительный статус ??
ОБНОВЛЕНИЕ 4
ОК Я думаю, что я отследил проблему до виновного, если не причина - БД, которую я создал с помощью PHP ezSQL, является той, в которой оператор IS NULL терпит неудачу.Если я создаю БД с помощью PHP-класса SQLite3, оператор работает нормально, и, кроме того, я могу получить доступ к БД из CLI, тогда как созданная ezSQL БД выдала ошибку file is encrypted
.
Поэтому я немного покопалсяв код ezSQL - Я вижу, что он использует методы PDO, а не новый класс SQLite3.Может быть, это что-то - я не буду тратить впустую больше времени на это ...
В любом случае, я нашел свое решение, которое состоит в том, чтобы держаться подальше от ezSQL, и просто использовать PHPs класс SQLite3.