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!
run 'pg_last_error()' und lassen Sie uns die Ausgabe wissen. – Woot4Moo
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). –
Warum verwenden Sie nicht pg_fetch_all()? Keine Notwendigkeit für eine While-Schleife. –