我最难让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在
答案 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>