простая функция запроса БД - PullRequest
       5

простая функция запроса БД

1 голос
/ 26 сентября 2010

Я хочу иметь возможность вызывать функцию запроса, и на основании результатов они помещаются в объект, который я могу вызвать вне функции. Вот что у меня есть:

<?php

function query($sql) {
global $r;

$database = "theatre";
$db_conn = pg_connect ("host=localhost port=5432 
dbname=$database user=postgres");
if (!$db_conn): ?>
<h1>Failed connecting to postgres database <?php echo $database;?></h1> 
<?php
exit;
endif;

$ep = pg_query ($db_conn, $sql);

while ($r = pg_fetch_object ($ep)) {

}

pg_free_result($ep);
pg_close($db_conn);

}

query('select * from test');
echo $r->fname;

Я не хочу жестко задавать имена столбцов в функцию. Таким образом, fname является примером, но оно будет динамическим в зависимости от запроса. У меня есть цикл while, но я не уверен, что в него вставить.

1 Ответ

1 голос
/ 26 сентября 2010

Значение, возвращаемое функцией 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).

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