2010-12-02 12 views
1

サイトをMySQLからPostgresに変換していて、本当に奇妙なバグがあります。このコードは、RDBMSを切り替える前の状態で動作しました。次のループでは、pg_query()はループ内でクエリを実行していないようです

foreach ($records as $record) { 
    print "<li> <a href = 'article.php?doc={$record['docid']}'> {$record['title']} </a> by "; 

    // Get list of authors and priorities 
    $authors = queryDB($link, "SELECT userid FROM $authTable WHERE docid='{$record['docid']}' AND role='author' ORDER BY priority"); 

    // Print small version of author list 
    printAuthors($authors, false); 

    // Print (prettily) the status 
    print ' (' . nameStatus($record['status']) . ") </li>\n"; 
    } 

FIRSTクエリは正常です。それ以降の呼び出しは機能しません(pg_queryはヘルパー関数でfalseを返すので、終了します)。

function queryDB($link, $query) { 

    $result = pg_query($link, $query) or die("Could not query db! Statement $query failed: " . pg_last_error($link)); 

// Push each result into an array 
    while($line = pg_fetch_assoc($result)) { 
    $retarray[] = $line; 
    } 
    pg_free_result($result); 
    return $retarray; 
} 

本当に奇妙な部分:queryDBのコードは次のようである私は(PHPのは、との接続同じユーザーとして)クエリをコピーして、psqlでそれを実行したときにすべてがうまく動作します。または、関数呼び出しの代わりに私のループにqueryDBの文字列をコピーすると、正しい結果が得られます。では、このラッパーはどのようにバグを引き起こしていますか?

ありがとうございます!

+0

'pg_last_error()'を実行し、出力をお知らせください。 – Woot4Moo

+0

"pg_set_error_verbosity($ link、PGSQL_ERRORS_VERBOSE);で' 'pg_last_error()'からの出力はありません。私のラッパーがすでに 'pg_last_error'を呼び出していることに注目してください。出力を見るにはhttp://peano.colorado.edu/libermath/repositorium/?field=8を見てください(2010-12-02T1601 MST現在)。 –

+0

pg_fetch_all()を使用してみませんか? whileループの必要はありません。 –

答えて

2

php.iniが誤って設定されているためにエラー出力がないことがわかりました。私が出力を開始したときにエラーを戻した後、私は18 is not a valid PostgreSQL link resourceのようなものを得ました。 pg_pconnect()永続バージョン)を使用するように接続コードを変更すると、これが修正されました。 (このアイデアを見つけたhere

一見して助けてくれた皆様に感謝します!

関連する問題