Postgres хранимая процедура JSON ошибка

Поэтому я делаю приложение, в котором я хочу отображать строку json (на данный момент). Я вызываю хранимую процедуру с php (которая работает), и эта хранимая процедура возвращает строку.

Проблема в том, что возвращаемая запись / строка должна быть строкой json. Для этого я использую php:

$verbinding = pg_connect("host=**** port=**** dbname=*** user=******* password=****");
$query = 'SELECT to_json(function_name(parameter))';
$contests = pg_query($query);

if(json_decode($contests)) {
echo 'succeeded';
} else {
echo 'failed';
}

Теперь мой код всегда возвращается неудачно, и я не знаю, почему и как я могу это исправить. Заранее спасибо за вашу помощь!

0

Решение

Это:

$contests = pg_query($query);
json_decode($contests)

бессмысленно. Если вы замените json_decode с печатным заявлением вы поймете, почему.

в руководство возвращаемое значение pg_query является:

Ресурс результата запроса в случае успеха или FALSE в случае ошибки.

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

Это имеет смысл, учитывая, что результат запроса может иметь несколько строк и несколько значений в строке.

Раздел «См. Также» приведенной выше ссылки на документацию указывает на нужные вам функции.

В этом случае я предлагаю использовать pg_fetch_result (см. боковую панель).

В то время как у вас есть некоторые основные обработки ошибок, было бы разумно.

Я также сильно подозреваю, что вы не используете параметры связывания, подвергая себя SQL-инъекция. использование pg_query_params.

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

$query = 'SELECT to_json(function_name($1))';
$contests = pg_query_params($query, array($somevariable))
or die(pg_last_error());

$json = pg_fetch_result($contests, 0, 0);
if(json_decode($json)) {
# ....
}

Теперь серьезно иди почитай руководство.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]