Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php pg_query()似乎不在循环中执行查询_Php_Postgresql - Fatal编程技术网

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

Php pg_query()似乎不在循环中执行查询,php,postgresql,Php,Postgresql,我正在将一个站点从MySQL转换为Postgres,但有一个非常奇怪的bug。这段代码和我切换RDBMS之前一样工作。在以下循环中: foreach ($records as $record) { print "<li> <a href = 'article.php?doc={$record['docid']}'> {$record['title']} </a> by "; // Get list of authors and prioriti

我正在将一个站点从MySQL转换为Postgres,但有一个非常奇怪的bug。这段代码和我切换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";
  }
真正奇怪的部分是:当我复制查询并使用
psql
(与PHP连接的是同一个用户)运行它时,一切都正常运行。或者,如果我将queryDB的肉复制到我的循环中来代替函数调用,我会得到正确的结果。那么这个包装器是如何导致bug的呢


谢谢

我发现没有错误输出,因为我的
php.ini
配置错误;在重新打开错误后,我开始获取输出,我得到了如下信息:
18不是有效的PostgreSQL链接资源
。将我的连接代码更改为使用
pg_pconnect()
(持久版本)修复了此问题。(我发现了这个想法。)


感谢每一个看了一眼并试图帮忙的人

运行
pg\u last\u error()。注意,我的包装器已经调用了
pg\u last\u error
;查看以查看输出(截至2010-12-02T1601 MST)。为什么不使用pg_fetch_all()?不需要while-loop。Frank,谢谢你的提示,但这并不影响我的查询在第一次迭代后没有运行。这不是问题的解决方案,但应该是一个足够的解决方法。为什么不在
1
查询中获取结果,而不是在
n
查询中获取结果?也应该快一点。
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;
}