Значение, возвращаемое функцией pg_fetch_object уже является объектом, поэтому нет необходимости перебирать результаты. Просто верните его:
return pg_fetch_object ($ep);
Тогда просто используйте возвращенные результаты, не обращаясь к этой неудобной глобальной переменной $r
.
$r = query('select * from test');
echo $r->fname;
Кроме того, нет необходимости освобождать ресурс с помощью pg_free_result
. Он освобождается автоматически в конце области, в которой он существует (в данном случае это текущая функция). Вызов pg_close
также может замедлить ваш скрипт, так как при следующем вызове функции соединение придется заново создавать. Я бы предложил сохранить соединение в локальной статической переменной и не закрывать его вообще - оно будет закрыто автоматически.
function query($sql) {
$database = "theatre";
static $db_conn;
if (!$db_conn) {
$db_conn = pg_connect ("host=localhost port=5432 dbname=$database user=postgres");
}
...
В качестве долгосрочного решения я бы порекомендовал исследовать предмет объектно-реляционного отображения и изучить один из доступных инструментов ORM (например, Zend Db Table , Doctrine , Propel , или одна из существующих реализаций шаблона ActiveRecord).