Обсуждение: false No rows returned error
I am getting a No rows returned error from a php script when there are rows. I can cut and paste the sql statement in the error message into psql and the query returns 17 rows (which is correct). But why doesn't the result set in php seem to have any rows? There are no errors in the apache logs and I don't have access to the posgtres log file. I'm using postgreSQL 7.1.3, apache 1.3.22, php 4.0.6 running on a 2.4.7-10 linux kernel. Below is a code snippet (some lines wrapped, sorry). Thanks in Advance, Jim <? $conn=pg_connect("user=scott"); // make sure I'mconnecting to the correc db echo "<b>database name:". pg_dbname($conn)."</b></hr>\n"; if (!$conn){ exit(" connection failed: " . __FILE__ . __LINE__ . "error: " . pg_errormessage($conn) ); } $sql = "select pin, last_section_completed, comment from demographics"; $res = pg_exec($conn, $sql) || exit ("query failed: ".__FILE__ . __LINE__ ."<br> sql is $sql" ); if (!$res){ exit ("post query check failed");} // // script dies here (line 36), falling to the exit clause. // A warning is printed also : // Warning: Supplied argument is not a valid // PostgreSQL result resource // in /home/www/test/php_debug.php on line 36 $rows = pg_numrows($res) || exit ("No rows returned ".__FILE__ ." line:". __LINE__ . "<br> sql is $sql" ); // line 36 echo "<table>\n"; for($i=0;$i<$rows;$i++){ echo "<tr>\n"; $pin = pg_results($res,$i,'pin'); $section = pg_results($res, $i, 'last_section_completed'); $comment = pg_results($res, $i, 'comment'); $filler = pg_results($res, $i, 'filler'); echo "<td> $pin </td><td> $section </td><td> $comment</td>"; echo "<td> $filler </td>\n"; echo"</tr>\n"; } echo "</table>";
Jim Martinez <jjm@bigbigorg.org> writes: > I am getting a No rows returned error from a php script when there are > rows. I don't think so ... > // script dies here (line 36), falling to the exit clause. > // A warning is printed also : > // Warning: Supplied argument is not a valid > // PostgreSQL result resource I think that warning is what to pay attention to, and not the fact that your script falls over when pg_numrows then chooses to return 0. I don't know enough about PHP to know what you did wrong, but apparently $res does not contain the kind of object pg_numrows expects. I think it's a PHP problem, not an SQL issue at all. regards, tom lane
On 23 Mar 2002 at 11:04, Jim Martinez wrote: > <? > $conn=pg_connect("user=scott"); > > // make sure I'mconnecting to the correc db > echo "<b>database name:". pg_dbname($conn)."</b></hr>\n"; > > if (!$conn){ > exit(" connection failed: " . __FILE__ . __LINE__ . "error: " . > pg_errormessage($conn) ); > } > > $sql = "select pin, last_section_completed, comment from demographics"; > > $res = pg_exec($conn, $sql) || exit ("query failed: ".__FILE__ . __LINE__ > ."<br> sql is $sql" ); Change the above to this, just to be sure: res = pg_exec($conn, $sql); if (!$result) {echo "query failed: ".__FILE__ . __LINE__ ."<br> sql is $sql" );exit; } > if (!$res){ exit ("post query check failed");} BTW: the above if isn't necessary given the above. > > // > // script dies here (line 36), falling to the exit clause. > // A warning is printed also : > // Warning: Supplied argument is not a valid > // PostgreSQL result resource > // in /home/www/test/php_debug.php on line 36 Listen to this error. > $rows = pg_numrows($res) || exit ("No rows returned ".__FILE__ ." line:". > __LINE__ . "<br> sql is $sql" ); // line 36 -- Dan Langille The FreeBSD Diary - http://freebsddiary.org/ - practical examples
On 23 Mar 2002 at 12:35, Dan Langille wrote: > res = pg_exec($conn, $sql); > if (!$result) { Sorry, I copied and pasted from one of my own php pages: That should be res, not result. -- Dan Langille The FreeBSD Diary - http://freebsddiary.org/ - practical examples
On Mar 23, Dan Langille wrote: > On 23 Mar 2002 at 11:04, Jim Martinez wrote: > > > > > $res = pg_exec($conn, $sql) || exit ("query failed: ".__FILE__ . __LINE__ > > ."<br> sql is $sql" ); > > Change the above to this, just to be sure: > > $res = pg_exec($conn, $sql); > if (!$res) { > echo "query failed: ".__FILE__ . __LINE__ ."<br> sql is $sql" ); > exit; > } That worked! Thanks. Tom, you were right it was a php issue. This morning I subscribed to the pgsql-php list, then accidentally posted to the sql list that I've been lurking on. Best regards, Jim