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