2014-09-30 4 views
0

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

Проблема в том, что возвращаемая запись/строка должна быть 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'; 
} 

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

+2

Посмотрите, как получить результаты из запросов. Вы не можете просто назначить объект результата. –

+0

Я не понимаю, что вы имеете в виду. Я верю результат правильно? Это закодировано для JSON, так что результат уже прав json? – user3464409

+0

http://zetcode.com/db/postgresqlphp/read/ попытайтесь получить результат запроса, а затем попытайтесь вернуть json. я думаю, что вам не хватает механики запуска php для доступа к postgres, вам нужно выполнить итерацию результата, например, URL-адрес, который я разместил. – Greg

ответ

0

Это:

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

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

Per the manual возвращаемое значение pg_query является:

Запрос результата ресурс успешного завершения или FALSE в случае возникновения ошибки.

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

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

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

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

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

Я также сильно подозреваю, что вы не можете использовать параметры привязки, подвергая себя SQL injection. Use 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)) { 
    # .... 
} 

Теперь серьезно, почитайте инструкцию.

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