【问题标题】:simple db query function简单的数据库查询功能
【发布时间】:2010-09-26 13:50:58
【问题描述】:

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

<?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 循环,但不知道该放什么。

【问题讨论】:

    标签: php sql postgresql


    【解决方案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 工具(即Zend Db TableDoctrinePropel,或 ActiveRecord 模式的现有实现之一)。

    【讨论】:

      猜你喜欢
      • 2011-11-21
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多