【发布时间】:2013-11-13 02:11:51
【问题描述】:
我最难让 PHP 与 Postgres SQL 对话。这是我的设置:
Ubunu 桌面版 13.10
PHP 5.5.3
Postgres 9.1.10
阿帕奇 2.4.6
带有 xdebug 的 Netbeans 7.4
一切正常。我可以从命令行很好地输入和检索 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(没有查询数据)。
我还不能发布图片,但这里是来自 phpInfo() 的关于 Postgres 的详细信息:
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 开启
【问题讨论】:
-
呸,你为什么要使用
global $conn?只需使用$this->conn。此外,PHP 使用箭头运算符 (->) 来引用类实例方法,而不是点,所以它应该是$dbConn->getClients() -
这里对 PHP 有点陌生。我完全同意。将立即更改!
-
另外,您在哪里检查连接失败的错误?
-
我在 softwareDB 的调用下方有这些行:
if(!$dbConn){ die(pg_last_error()); } -
另一件事,
pg_query只需要 2 个参数(不是 3 个),pg_fetch_result需要 2 或 3 个(当然不是 1)。我建议您阅读您正在使用的功能的手册页
标签: php postgresql pdo