Re: can't retrieve more than 1 record at the time

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Dec 09, 2009 at 11:39:55AM -0800, Catherine Madsen wrote:

> Hi,
>
> I'm really in need of help.  I'm not a PHP programmer, but I've been
> given the privilege of customizing a script written by somebody else and
> can't get it to work right.  I have to query 2 different tables in 2
> different Oracle 10G DBs, one's mine (my_schema.my_table), the other
> (otherdb.other_table) belongs to another department.  In my_table, I
> have the doc_id and the app_id for a record.  In other_table there's the
> doc_id and pdf  to retrieve.  The goal is to make a PDF file from each
> BLOB in other_table and store them in the right directory under
> hash(app_id).  PDO has been installed and working, and I can connect to
> both DBs without a problem.  If my query limits the retrieval to one
> record, the script works, but if I try to run it for all records, one
> pdf  file is correctly created in the right directory then  I get the
> following error: PHP Fatal error:  Call to a member function fetch() on
> a non-object in /my_location/my_script.php on line 154.  It the "while
> ($stmt->fetch(PDO::FETCH_BOUND))" line.  I've pasted my script below.  I
> thought my problem was that maybe I was in the wrong directory after
> creation of the first pdf, but  several tries changing the directory
> didn't make a difference.  Right now, I'm running the script at the
> command line.  Soon I'm going to have a few hundred records to deal with
> and cannot do it one by one!  Any help would be very much appreciated.
> Thank you!
>

<snip>

>
>    if (!(chdir($curdir)))
>        {
>            $_SESSION['msgs'][] = 'Could not change to '.$curdir;
>            continue;
>        }
>
>        $cnt = 0;
>
>        while ($stmt->fetch(PDO::FETCH_BOUND))
>        {
>            $filename = 'phs-'.$cnt.'.pdf';
>
>           if (!file_exists($filename))
>            { /* if file not already there, write file with BLOB contents */
>                $fh = fopen($filename, 'w');
>                fwrite($fh, stream_get_contents($PDF));
>                fclose($fh);
>
>                /* add to $_SESSION['PHPulled'] for each new file saved */
>                $_SESSION['PHPulled'] = $_SESSION['PHPulled'] + 1;
>             }

Judging by your indentation you probably want a closing brace here. As
it is, your while statement won't end until the final closing brace,
which includes the "$stmt = NULL;" statement. Nulling this variable in
the middle of the while loop will cause it to execute once only and
cause the error message you're seeing.

>
>
>        /* increment stack counter */
>        $_SESSION['numberCand'] = $_SESSION['numberCand'] + 1;
>
>        $stmt = NULL; /* release the connection */
>
>          /*if not done with stack, redirect to self to get next*/
>        if (!empty($_SESSION['DOCIDs']) and
>            $_SESSION['numberCand'] < count($_SESSION['DOCIDs']))
>            {
>                exit;
>
>            }
>        }
> }
>
> /* once done, go back to display search page after clearing stack
> if(isset($_SESSION['DOCIDs']))
>    unset($_SESSION['DOCIDs'] );*/
>
> $res = null;
> $dbh1 = null;

Paul

-- 
Paul M. Foster

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux