2013-04-23 63 views
1

我使用PostgreSQL 9.1與postGIS 2.0。也是Apache 2.2.22和PHP 5.3.13。我正在嘗試爲PHP的PostgreSQL設置PDO。我也使用Windows 7 根據這一this我行,我檢查我的php.ini,我發現這條線extension=php_pgsql.dll配置爲pdo和postgesql

但根據this(運行時配置),我必須設置一個DSN在我的php.ini 。我實際上沒有得到我必須做的事情。爲什麼。我嘗試在php.ini中寫入類似pdo.dsn.'pgsql:host=localhost;port=5432'的內容,然後重新啓動Apache。

之後,我創建了一個新的php文件來測試PDO。 這是代碼

try { 
     $DBH = new PDO("pgsql:host=localhost;port=0000;dbname=blah;user=blah;password=blah"); 
     $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 

    } 
    catch(PDOException $e) { 
    echo" sorry man! "; 
     echo $e->getMessage(); 
    } 
$name="frouto"; 
$STH = $DBH -> prepare("SELECT * FROM controller WHERE c_name LIKE :name;"); 
$STH->bindParam(':name', $name); 

$STH->execute(); 
$result = $STH->fetchAll(PDO::FETCH_ASSOC); 

只是非常簡單的測試PDO。這根本不起作用。也不打印異常錯誤。我猜運行時配置是錯誤的。而dsn也是錯誤的。我需要做些什麼來解決它們?

謝謝

回答

1

首先,確保postgres在本地主機上運行。

第二,確保您可以連接到Postgres的:遠程登錄本地主機5432

三,Postgres的通常運行在端口5432您的代碼是在0000

連接的DSN是在(只)參數您的PDO創建:

$DBH = new PDO("pgsql:host=localhost;port=0000;dbname=blah;user=blah;password=blah"); 

$dsn = "pgsql:host=localhost;port=0000;dbname=blah;user=blah;password=blah"; 
$DBH = new PDO($dsn); 

檢查這些步驟中的每一個,並再次詢問如何解決其中一個失敗的問題,並且您無法確定該步驟。

+0

@ Zak Hi。是的,我檢查並運行良好。我可以通過使用'pg_connect'連接,所以我想我沒問題。是的,真正的端口是5432,我只是選擇「隱藏」,以及用戶名,passowrd等。所以,只是爲了澄清,我不必在我的php.ini文件中添加任何東西?那麼問題是什麼?我沒有得到它 – slevin 2013-04-23 22:27:05

+0

你也可以使用命令行中的相關登錄憑據來運行你的查詢嗎?確保您有權運行查詢。 – Zak 2013-04-23 23:56:09

+0

另外,在$ results上做一個print_r ..那是什麼意思? – Zak 2013-04-23 23:58:04