2010-12-02 2 views
1

Ich konvertiere eine Site von MySQL zu Postgres und habe einen wirklich seltsamen Bug. Dieser Code funktionierte unverändert, bevor ich das RDBMS wechselte. In der folgenden Schleife:pg_query() scheint keine Abfragen in einer Schleife auszuführen

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"; 
    } 

die erste Abfrage ist in Ordnung. Nachfolgende Aufrufe funktionieren nicht (pg_query gibt false in der Hilfsfunktion zurück und stirbt ab). Der Code für queryDB ist folgender:

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; 
} 

Der wirklich seltsam Teil: Wenn ich die Abfrage kopieren und mit psql (als den Benutzer, die PHP-Anschluss mit) laufe alles läuft gut. ODER wenn ich das Fleisch von queryDB anstelle des Funktionsaufrufs in meine Schleife kopiere, bekomme ich das korrekte Ergebnis. Also, wie verursacht dieser Wrapper Fehler?

Danke!

+0

run 'pg_last_error()' und lassen Sie uns die Ausgabe wissen. – Woot4Moo

+0

Seltsamerweise gibt es keine Ausgabe von 'pg_last_error()' - selbst danach mit 'pg_set_error_verbosity ($ link, PGSQL_ERRORS_VERBOSE);'. Beachten Sie, dass mein Wrapper 'pg_last_error' bereits aufruft; Sehen Sie sich http://peano.colorado.edu/libermath/repositorium/?field=8 an, um die Ausgabe zu sehen (Stand: 2010-12-02T1601 MST). –

+0

Warum verwenden Sie nicht pg_fetch_all()? Keine Notwendigkeit für eine While-Schleife. –

Antwort

2

Ich habe festgestellt, dass keine Fehlermeldung ausgegeben wurde, weil mein falsch konfiguriert wurde. Nachdem ich die Fehler wieder eingeschaltet hatte, begann ich mit der Ausgabe, ich bekam Dinge wie 18 is not a valid PostgreSQL link resource. Das Ändern meines Verbindungscodes zur Verwendung von pg_pconnect() (persistent Version) hat dies behoben. (Diese Idee gefunden here.)

Vielen Dank an alle, die einen Blick und versucht zu helfen!

Verwandte Themen