Кажется, pg_query () не выполняет запросы в цикле - PullRequest
1 голос
/ 03 декабря 2010

Я конвертирую сайт из MySQL в Postgres и у меня действительно странная ошибка. Этот код работал как есть до того, как я переключил СУБД. В следующем цикле:

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

Первый запрос в порядке. Последующие вызовы не работают (pg_query возвращает false в вспомогательной функции, поэтому он умирает). Код для queryDB следующий:

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

Действительно странная часть: когда я копирую запрос и запускаю его с psql (как тот же пользователь, к которому подключается PHP), все работает нормально. ИЛИ, если я скопирую мясо queryDB в свой цикл вместо вызова функции, я получу правильный результат. Так как же эта оболочка вызывает ошибки?

Спасибо!

1 Ответ

2 голосов
/ 03 декабря 2010

Я обнаружил, что не было вывода ошибок из-за неправильной настройки моего php.ini;после включения ошибок я начал получать выходные данные, такие как 18 is not a valid PostgreSQL link resource.Изменение кода подключения для использования pg_pconnect() (версия persistent ) исправило это.(Нашёл эту идею здесь .)

Спасибо всем, кто взглянул и попытался помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...