You are here: Re: [PHP] resetting pg_fetch_array « PHP « IT news, forums, messages
Re: [PHP] resetting pg_fetch_array

Posted by Dave O on 02/22/05 19:53

Richard Lynch wrote:

> Dave O wrote:
>
>>Hi all. I'm been trying the following code for the past day or so and I
>> can't seem to get around it. I'm issuing a query to pgsql and
>>iterating through the results twice in order to facilitate the
>>separation of shipment history.
>>
>>Below is the simplest example I can come up with. The results only
>>display once, even though I'm not issuing any other db calls after the
>>1st iteration and the resouce id remains the same. Heck, even
>>pg_num_rows returns the same result twice, but the results just won't
>>display a second time.
>>
>>I'm running this on freebsd 5.3 using pgsql v8 and php 4.3.10. Anybody
>>got any suggestions. TIA.
>>
>>Dave
>>
>>table looptest
>> rownum | rowstr
>>--------+--------
>> 1 | aaaaaa
>> 2 | bbbbbb
>> 3 | cccccc
>> 4 | dddddd
>>
>>include ('connection.inc.php');
>>$sql = "SELECT rownum, rowstr FROM looptest";
>>$result = pg_query($conn, $sql);
>>$c=2;
>>$x=0;
>>echo "<pre>\n";
>>while ($x<$c)
>>{
>> echo pg_num_rows($result) . "->";
>> print_r($result);
>> echo "\n\n";
>> reset($result);
>> while($row = pg_fetch_array($result))
>
>
> This automatically advances an internal "counter" to the next row.
>
> You never "rewind" the counter.
> [Be kind, rewind!]
>
> You can either find the pg_data_seek function that does the rewind, or you
^ ^ ^ ^
pg_result_seek ???
> can do a counter yourself and pass in the optional row number argument to
> pg_fetch_array:
>
> $row_num = 0;
> while ($row = pg_fetch_array($result, $row_num++))
>
> The reset function you are using is for ARRAYS, and has nothing to do with
> pg resources and database result sets.
>
> I'm surprise you are not getting some kind of error on that...
>
> Or maybe you aren't using 'error_reporting(E_ALL)' like you should.
>
>
>> stuff snipped

Yep, pg_result_seek did the trick. Using:

pg_result_seek($result, 0)

...just before the 'while' statement makes the results show up twice. I
reread the manual page for this and understood there was a counter, but
it didn't click that there might be a pg function to handle this. I
took the mention of "array" too seriously and was looking under the
array functions.

Btw, E_ALL is set, but following suggestions in these lists and the
site, I've it set to log to a file and not display any errors. That's
probably something to reconsider for development.

Thanks for the help Richard. Much appreciated.

Dave

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация