Ошибка при вставке метки времени с pg_query_params

Я работаю в postgres 8.4 и PHP 5.4.3, используя pg_query_params. У меня есть таблица с названием armies, в которой 3 строки (ну, только для этого примера, на самом деле их больше). идентификатор является целым числом, а два других являются отметкой времени без часового пояса. Теперь вставка SQL:

ВСТАВИТЬ В ЗНАЧЕНИЯ public.armies(id,build_start,build_end) ($1,$2,$3)

И массив, который я вставляю:

    $data['id'] = 1;
    $data['build_start'] = "now()";
    $data['build_end'] = "now() + time '00:00:50'";

Ошибка E_WARNING: pg_query_params(): Ошибка запроса: ОШИБКА: недопустимый синтаксис ввода для метки времени типа: «сейчас() + время '00:00:50'»

Это работает, когда я пытался вставить его как необработанный sql, используя pg_query, например: INSERT INTO public.armies(id,build_start,build_end) VALUES (11935,now(),now() + time '00:00:50').

Так что я предполагаю, что это как-то связано с pg_query_params(), я действительно очень хочу вставить его с помощью pg_query_params.

Чего я хочу добиться, так это суммировать это now() с этим 00:00:50 секунд, чтобы я мог изменить эти $data['build_end'].


person ctamayo    schedule 25.05.2013    source источник


Ответы (1)


Обратите внимание, что вы передаете строковые литералы

$data['build_start'] = "now()";
$data['build_end'] = "now() + time '00:00:50'";

в pg_query_params, который не может подготовить действительное значение даты/времени из "now()" или "now() + time '00:00:50'".

Вместо

INSERT INTO public.armies(id,build_start,build_end) VALUES ($1,$2,$3);

изменить его на

INSERT INTO public.armies(id,build_start) VALUES ($1,now());

и убрать параметры

$data['build_start'] = "now()";
$data['build_end'] = "now() + time '00:00:50'";

Теперь, когда действие завершится, обновите таблицу.

UPDATE public.armies SET build_end=now() WHERE id=$1;

Надеюсь, я смог вам помочь.

person Nick Binnet    schedule 19.06.2013