Как вставить метку времени UNIX в базу данных Oracle с помощью PHP - PullRequest
1 голос
/ 31 марта 2019

Я посмотрел вокруг переполнения стека (есть много этих вопросов, но ни один из них с PHP).

У меня есть таблица, которая:

CREATE TABLE test(
    my_id                   number(8)
                            NOT NULL
                            PRIMARY KEY,

    creation_date           timestamp
                            NOT NULL
);

Я пытаюсьвставить текущее время в таблицу.Я хочу вставить его, используя значение (не sql сокращения, такие как CURRENT_TIMESTAMP. Например, используя функцию time() в php.

$customID = 1;
$currTime = time();

$sql = "INSERT INTO test (my_id, creation_date) 
        VALUES (:my_id, :creation_date)";
$stid = oci_parse($conn, $sql);
oci_bind_by_name($stid, ":my_id", $customID);
oci_bind_by_name($stid, ":creation_date", $currTime);
oci_execute($stid);

Однако, когда я запускаю вышеприведенный оператор, яполучаю ошибку:

Warning: oci_execute(): ORA-00904: "CREATION_DATE": invalid identifier

Ответы [ 3 ]

0 голосов
/ 31 марта 2019

Вы можете использовать такое преобразование ниже

$sql = "INSERT INTO test (my_id, creation_date) 
        VALUES (:my_id, date'1970-01-01' + (:creation_date / 60 / 60 / 24 ) )";

Поскольку этот отсчет начинается в эпоху Unix 1 января 1970 года в UTC.А остальное, очевидно, связано с долями по часам, минутам и секундам в каждый день.

0 голосов
/ 31 марта 2019

Существует менее известная функция в oracle, называемая numtodsinterval (value, 'intervalunit'), которую можно использовать.Вот так.

select to_date('19700101','YYYYMMDD') + numtodsinterval(1553990400,'SECOND') from dual;

Или вот так в вашем контексте (не тестировалось)

$sql = "INSERT INTO test (my_id, creation_date) 
        VALUES (:my_id, to_date('19700101','YYYYMMDD') + numtodsinterval(:creation_date ,'SECOND'))";

Oracle doc

0 голосов
/ 31 марта 2019

UNIX-отметка времени представлена ​​в формате эпохи, который представляет собой просто числа, но вы используете формат отметки времени для хранения времени Unix.Вместо этого измените тип данных на integer, чтобы решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...