pg_query()似乎不在循环中执行查询

时间:2010-12-02 22:44:06

标签: php postgresql

我正在将一个站点从MySQL转换为Postgres并且有一个非常奇怪的错误。在我切换RDBMS之前,此代码按原样运行。在以下循环中:

 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,因此它会死掉)。 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 个答案:

答案 0 :(得分:2)

我发现由于php.ini配置错误导致没有错误输出;在重新开启错误之后,我开始获得输出,我得到了18 is not a valid PostgreSQL link resource之类的东西。更改我的连接代码以使用pg_pconnect()持久性版本)修复此问题。 (找到了这个想法here。)

感谢所有看过并试图提供帮助的人!