2013-03-14 62 views
2

的問題pg_query返回NULL即使SQL查詢工作正確pgAdminIII

下面的代碼返回「查詢...... NULL」(假設$id始終是一個6位數字)

$id = sprintf("%06d", $id); 
$sql = 'SELECT DISTINCT first_name, last_name 
     FROM schemaname.tablename 
     WHERE person_id='.$id; 
$q = pg_query($sql) or die(pg_last_error().' '.$sql); 
print 'queried...'; 
$items = pg_fetch_all($q) or die(pg_last_error().' '.var_export($q, true)); 
print 'fetched...'; 
exit(0); 

注:person_idinteger not null

我曾嘗試

回答

-2

您沒有連接到數據庫。您需要創建一個數據庫連接,然後通過該連接的處理程序,以pg_query()

$conn = pg_pconnect("dbname=publisher"); 
if (!$conn) { 
    echo "An error occurred.\n"; 
    exit; 
} 

$id = sprintf("%06d", $id); 
$sql = 'SELECT DISTINCT first_name, last_name 
     FROM schemaname.tablename 
     WHERE person_id='.$id; 
$q = pg_query($conn, $sql) or die(pg_last_error().' '.$sql); 
print 'queried...'; 
$items = pg_fetch_all($q) or die(pg_last_error().' '.var_export($q, true)); 
print 'fetched...'; 
exit(0); 
+0

有我從源代碼中省略掉出於安全原因和「我曾嘗試」一節中提到的間接一個pg_connect。 – 2013-03-15 01:11:28

0

您所有的測試到目前爲止看起來它已經在PHP端發生。直接的問題是PostgreSQL方面發生了什麼。我的打賭會是這樣的:

  1. 該查詢不是你認爲它是什麼。

  2. PostgreSQL沒有得到你認爲它得到的東西。

  3. 別的東西。

的第一件事要做的就是與pgAdmin的登錄,運行下面的實用語句:

ALTER USER [app username] SET log_statements=all; 

然後運行你的PHP腳本,並檢查什麼PostgreSQL確實接收。然後您可以運行pgAdmin中日誌中的語句來檢查。例如,你可能會發現你的sprintf沒有做你認爲它正在做的事,或者你的查詢在某處存在拼寫錯誤。

當你做,你可以:

ALTER USER [app username] RESET log_statements;