无法将PHP连接到Postgres

时间:2013-11-13 02:11:51

标签: php postgresql pdo

我最难让PHP与Postgres SQL交谈。这是我的设置:

Ubunu Desktop 13.10
PHP 5.5.3
Postgres 9.1.10
Apache 2.4.6
Netbeans 7.4 with xdebug

一切都很好。我可以从命令行输入和检索Postgres数据库中的数据,但不能在PHP中输入和检索。以下是我用来连接的代码行:

$dbConn = new softwareDB('localhost', 'postgres', 'root', 'softwareuitest');
...
  $results = $dbConn.getClients();
    while($client = pg_fetch_result($results)){
        echo '<option value=\"'.$client.'\">'.$client.'</option>';
    }

softwareDB类构造函数如下:

Class softwareDB {

private $conn;

function _construct($host, $user, $password, $dbname) {
    $connectString = 
            'host=' . $host .
            ' port=5432' . 
            ' user=' . $user .
            ' password=' . $password .
            ' dbname' . $dbname;

    $this->conn = pg_connect($connectString);
}
...
public function getClients() {
    global $conn;
    return pg_query($conn,'getClients','SELECT * FROM clients');
}
...
}

运行代码时没有任何反应......我在Apache日志文件中看不到任何内容,postgres日志中没有任何内容,调试器中没有任何内容,输出中只有HTML(没有查询数据)。

我无法发布图片,但这里是关于Postgres的详细信息来自phpInfo():

PDO
PDO驱动程序|的pgsql

pdo_pgsql
版本9.1.9
模块1.0.2
修订版$ id $

的pgsql
PostgreSQL(libpq)|在x86_64-unknown-linux-gnu上的PostgreSQL 9.1.9,由gcc编译(Ubuntu / Linaro 4.8.1-10ubuntu1)4.8.1,64位 allow_persistent在

1 个答案:

答案 0 :(得分:1)

您有两个主要问题。首先是拼写错误;通过箭头运算符调用PHP类实例方法。它应该是......

$results = $dbConn->getClients();

第二个是你对global $conn的使用。您没有名为$conn的变量,全局与否。你所拥有的是一个成员属性$conn,你可以通过在$this前面加上它来引用,例如

public function getClients() {
    return pg_query($this->conn, 'SELECT * FROM clients');
}

进一步观察,我建议如果您要在softwareDB课程中抽象出数据库详细信息,那么您可以完全这样做。我会选择这样的东西

class softwareDB {
    private $conn;

    public function __construct($host, $user, $password, $dbname) {
        $this->conn = pg_connect(sprintf('host=%s port=5432 user=%s password=%s dbname=%s',
            $host, $user, $password, $dbname));
        if ($this->conn === false) {
            throw new Exception(pg_last_error());
        }
    }

    public function getClients() {
        $result = pg_query($this->conn, 'SELECT * FROM clients');
        return pg_fetch_all($result);            
    }
}

我不太熟悉PostgreSQL函数,所以你可能需要调整它,但一般的想法是使用你的softwareDB类的代码不需要知道关于postgres或其他数据库操作的任何内容。 / p>