简单的db查询功能

时间:2010-09-26 13:50:59

标签: php sql postgresql

我希望能够调用一个查询函数,并根据结果将它们放入一个我可以在函数外部调用的对象中。这就是我所拥有的:

<?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 个答案:

答案 0 :(得分:1)

函数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-ish工具(即Zend Db TableDoctrinePropel或一个ActiveRecord模式的现有实现)。