Использование типа отметки времени с pg_prepare - PullRequest
1 голос
/ 25 февраля 2010

Запуск следующего кода:

$preCallMatch = pg_prepare($dbcp, 'callMatch',
                            "SELECT duration 
                               FROM voip_calls 
                              WHERE system_id = $1 
                                AND call_start => $2                                   
                                AND call_start <= $3
                                AND destination = $4");

Я получаю следующую ошибку:

Warning: pg_prepare(): Query failed: ERROR:  operator does not exist: timestamp without time zone => "unknown"
HINT:  No operator matches the given name and argument type(s). You may need to add explicit type casts. in /home/www/dinesh/UPSReconcileZeroSecondCalls.php on line 38

Я попытался разыграть $ 2 таким образом, но не повезло:

$preCallMatch = pg_prepare($dbcp, 'callMatch',
                            "SELECT duration 
                               FROM voip_calls 
                              WHERE system_id = $1 
                                AND call_start => CAST ( $2 AS TIMESTAMP )
                                AND call_start <= CAST ( $3 AS TIMESTAMP )
                                AND destination = $4");


Warning: pg_prepare(): Query failed: ERROR:  operator does not exist: timestamp without time zone => timestamp without time zone
HINT:  No operator matches the given name and argument type(s). You may need to add explicit type casts. in /home/www/dinesh/UPSReconcileZeroSecondCalls.php on line 38

Типы столбцов из таблицы voip_calls:

call_start     | timestamp without time zone |
call_end       | timestamp without time zone | not null

Какие-нибудь подсказки относительно того, что я делаю неправильно? Обратите внимание, что PDO или MDPD сейчас недоступны.

Версии программного обеспечения:

ii  php5                            5.2.6.dfsg.1-1+lenny3      server-side, HTML-embedded scripting languag
ii  libapache2-mod-php5             5.2.6.dfsg.1-1+lenny3      server-side, HTML-embedded scripting languag
ii  php5-pgsql                      5.2.6.dfsg.1-1+lenny3      PostgreSQL module for php5
ii  libpq5                          8.3.8-0lenny1              PostgreSQL C client library
postmaster (PostgreSQL) 8.1.4

Ответы [ 2 ]

0 голосов
/ 25 февраля 2010

Оказывается, это были операторы <= и =>. Делать это работает нормально:

$preCallMatch = pg_prepare($dbcp, 'callMatch',
                            "SELECT duration 
                               FROM voip_calls 
                              WHERE system_id = $1 
                                AND call_start BETWEEN $2 AND $3
                                AND destination = $4");
0 голосов
/ 25 февраля 2010

Это может быть ваш оператор =>, вызывающий проблему - попробуйте> = вместо этого.

Также в качестве подсказки мне легче написать $ 2 :: timestamp вместо CAST ($ 2 AS TIMESTAMP) - это специфичный для PostgreSQL синтаксис, но для меня он читается лучше (и его меньше набирать ;-))

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