Это обычно происходит при непосредственном использовании функции с empty
.
Пример:
if (empty(is_null(null))) {
echo 'empty';
}
Это связано с тем, что empty
- это языковая конструкция, а не функция, она не может быть вызвана с выражением в качестве аргумента в версиях PHP до 5.5. До PHP 5.5 аргумент empty()
должен быть переменной , но произвольное выражение (такое как возвращаемое значение функции) допустимо в PHP 5.5 +.
empty
, несмотря на его имя, на самом деле не проверяет, является ли переменная «пустой». Вместо этого он проверяет, существует ли переменная, или == false
. Выражения (например, is_null(null)
в примере) всегда будут считаться существующими, поэтому здесь empty
проверяет только, равен ли он false. Здесь вы можете заменить empty()
на !
, например. if (!is_null(null))
, или явно сравнить с ложным, например. if (is_null(null) == false)
.
Вопросы, относящиеся
Я нашел на sqlite документации ( https://www.sqlite.org/lang_datefunc.html ) этот текст:
Вычисляют дату и время, учитывая Unix, устанавливают метку времени 1092941466 и компенсируют Ваш локальный часовой пояс.
SELECT datetime(1092941466, 'unixepoch', 'localtime');
, Который не был похож на него, соответствуют моим потребностям, таким образом, я пытался менять функцию "даты и времени" немного, и завершенный с этим:
select datetime(timestamp, 'localtime')
, Который, кажется, работает - который является корректным способом преобразовать для Вашего часового пояса, или там лучший способ сделать это?
Необходимо, как правило, оставить метки времени в базе данных в GMT, и только преобразовать их в местное время на вводе/выводе, когда можно преобразовать их в пользователя (не сервер) локальная метка времени.
было бы хорошо, если Вы могли бы сделать следующее:
SELECT DATETIME(col, 'PDT')
... для вывода метки времени для пользователя на Тихоокеанском летнем времени. К сожалению, это не работает. Согласно это учебное руководство SQLite, однако (прокручивают вниз к "Другим Командам Даты и времени"), можно спросить в течение времени, и затем применить смещение (в часах) одновременно. Так, если Вы действительно знаете, что часовой пояс пользователя сместил, Вы хороши.
не имеет дело с правилами перехода на летнее время, хотя...
В (признал редкий) случай, что локальная дата и время требуется (я, например, храню местное время в одной из моей базы данных начиная со всего, которое я забочусь, - то, во сколько в день, был, и я не отслеживаю то, где я был с точки зрения часовых поясов...), можно определить столбец как
"timestamp" TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M','now', 'localtime'))
%Y-% m-% dT%H: % M часть является, конечно, дополнительным; это, как мне нравится, когда мое время хранится. [Кроме того, если мое впечатление корректно, в sqlite нет никакого типа данных "ДАТЫ И ВРЕМЕНИ", таким образом, это действительно не имеет значения или ТЕКСТ, или ДАТА И ВРЕМЯ используется в качестве типа данных в объявлении столбца.]
Я думаю, что это могло бы помочь.
SELECT datetime(strftime('%s','now'), 'unixepoch', 'localtime');
Если столбец определен с помощью " НЕ НУЛЕВОЙ ТЕКУЩИЙ_ВРЕМЯ ПО УМОЛЧАНИЮ
," для вставленных записей всегда устанавливается время UTC / GMT.
Вот что я сделал, чтобы не включать время в мои инструкции INSERT / UPDATE:
--Create a table having a CURRENT_TIMESTAMP:
CREATE TABLE FOOBAR (
RECORD_NO INTEGER NOT NULL,
TO_STORE INTEGER,
UPC CHAR(30),
QTY DECIMAL(15,4),
EID CHAR(16),
RECORD_TIME NOT NULL DEFAULT CURRENT_TIMESTAMP)
--Create before update and after insert triggers:
CREATE TRIGGER UPDATE_FOOBAR BEFORE UPDATE ON FOOBAR
BEGIN
UPDATE FOOBAR SET record_time = datetime('now', 'localtime')
WHERE rowid = new.rowid;
END
CREATE TRIGGER INSERT_FOOBAR AFTER INSERT ON FOOBAR
BEGIN
UPDATE FOOBAR SET record_time = datetime('now', 'localtime')
WHERE rowid = new.rowid;
END
Проверить, работает ли это ...
--INSERT a couple records into the table:
INSERT INTO foobar (RECORD_NO, TO_STORE, UPC, PRICE, EID)
VALUES (0, 1, 'xyz1', 31, '777')
INSERT INTO foobar (RECORD_NO, TO_STORE, UPC, PRICE, EID)
VALUES (1, 1, 'xyz2', 32, '777')
--UPDATE one of the records:
UPDATE foobar SET price = 29 WHERE upc = 'xyz2'
--Check the results:
SELECT * FROM foobar
Надеюсь, что помогает.
просто использовать местное время по умолчанию:
CREATE TABLE whatever(
....
timestamp DATE DEFAULT (datetime('now','localtime')),
...
);