Проблема с запросом базы данных postgresql в php - PullRequest
0 голосов
/ 26 мая 2011

Я написал этот код для отображения списка элементов, извлеченных из базы данных postgresql, этот код немного длинен, поэтому я добавил его сюда, чтобы выяснить проблему, с которой я столкнулся.результат, который я получаю, приведен ниже`test1m

Resource id #4
Galle
Kandy
Anuradhapura
Dambulla
Hambantota
Colombo
Hikkaduwa
test2
Resource id #4

, но ожидается, что это будет

test1m
Resource id #4
Galle
Kandy
Anuradhapura
Dambulla
Hambantota
Colombo
Hikkaduwa
test2
Resource id #4 Galle
Kandy
Anuradhapura
Dambulla
Hambantota
Colombo
Hikkaduwa

Вот код

$date = date("Y-m-d");
$dbh = pg_connect("host=localhost dbname= drupal_test user=usrx password=123");
if (!$dbh) {
  die("Error in connection: " . pg_last_error());
}           

$sql1 = "SELECT * 
           FROM node, modify_dates, node_counter 
          WHERE node.nid = modify_dates.nid 
            AND node.nid = node_counter.nid 
            AND modify_dates.nid = node_counter.nid 
            AND node_counter.totalcount < '1000' 
            AND node.type = 'city_guide' 
       ORDER BY modify_dates.lmd";
$sel1 = pg_query($sql1);

$sql2 = "SELECT * 
           FROM node, modify_dates, node_counter 
          WHERE node.nid = modify_dates.nid 
            AND node.nid = node_counter.nid 
            AND modify_dates.nid = node_counter.nid 
            AND node_counter.totalcount > '1000' 
            AND node.type = 'city_guide' 
       ORDER BY modify_dates.lmd";
$sel2 = pg_query($sql2);

if(pg_num_rows($sel1) > 0) {
  echo "test1";
  chooseItems($sel1);                           
} else if(pg_num_rows($sel2) > 0) {
  echo "test1m<br/>";
  chooseItems($sel2);                           
} 

if(pg_num_rows($sel2) > 0) {
  echo "test2<br/>";
  chooseItems($sel2);                           
} else if(pg_num_rows($sel1) > 0) {
  echo "test2m<br/>";
  chooseItems($sel1);                           
}       

function chooseItems($sel) {
  echo $sel."<br/>";                                    
  $m = 0;

  while($row = pg_fetch_array($sel)) {
    echo $row['title']."<br/>";                 
    $m = $m+1;                  
  }             
}               

pg_close($dbh); 

1 Ответ

2 голосов
/ 26 мая 2011

Проблема в том, что pg_fetch_array() потребляет строку ввода.После того, как вы прочитали все строки, вот и все.Но потребление не влияет на количество строк, возвращаемых запросом.Так что pg_num_rows() остается постоянным, но когда вы пытаетесь прочитать больше данных с помощью pg_fetch_array (), нечего читать, это было использовано.

Вы можете запросить снова, чтобы обновить содержимое.

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