2017-02-11 2 views
0

Я использую модуль НОГО pg с Node.js и имею следующий запрос:параметризованные запросы с помощью узла-Postgres не передаются между кавычками

query = "SELECT * FROM territories WHERE '($1, -122.26), (47.57, -122.36)'::box \ 
     @> point(nwlat, nwlng) ORDER BY nwlat, nwlng;" 
client.query(query, [lat+.05], callback); 

Когда я запускаю это, я получаю следующее ошибка:

invalid input syntax for type box: "($1, -122.26), (47.57, -122.36)"

Но когда я заменяю $1 с десятичный литерал, как 47.67, он выполняет нормально. Что я делаю неправильно?

ответ

1

Ваша проблема заключается в том, что это:

'$1' 

не имеет заполнитель в нем, это строковый литерал, который как раз случается содержать некоторые символы, которые выглядят как нумерованный заполнителем. Так что это:

'($1, -122.26), (47.57, -122.36)' 

не имеет заполнителя либо, это просто строковая, что происходит, чтобы содержать символы $ и 1. Рассмотрим разницу между этим:

let x = 6; 
let y = 'x'; // String that contains the name of a variable. 

и это:

let x = 6; 
let y = x; // The actual variable itself. 

в JavaScript, та же идея.

Вы можете создать свой box строку с помощью конкатенации:

WHERE ('(' || $1 || ', -122.26), (47.57, -122.36)')::box 

, но это не очень красиво. Очиститель решение будет обходить строки и литья в целом с помощью point and box functions:

WHERE box(point($1, -122.26), point(47.57, -122.36)) 
+0

Спасибо, это то, чего я ожидал, но я хотел уточнить. – DonutGaz

0

Расширения на ответ на @mu слишком короток

С pg-promise запроса форматирования вы получите именно то, что вы ожидаете;)

Смежные вопросы