Re: MySQL resource

From: Date: Fri, 12 Oct 2001 11:26:33 +0000
Subject: Re: MySQL resource
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-70916@lists.php.net to get a copy of this message
I think that the resource id is never <1 so.....the strength of C moved to PHP is that if the statements returns some result $a=5 if ($a=6) { echo "Here";} Someone can tell that this is faulty bu I know I use =, not ==, $a=6 returns 6 so $b=$a=6 will force PHP to assign 6 to $b. You get in if when the expression is >0 otherwise else clause is used if present. Look at this: for ($=0;$i++,$i<5;) echo $i; // looks strange, a? it is but i think that the for in C/PHP and other C-style languages is the most powerful... -- Andrey Hristov Web Developer IcyGEN Corporation BALANCED SOLUTIONS http://www.icygen.com P.S. The result from the for is "1234" On Friday 12 October 2001 13:20, you wrote: > > $result = mysql_query($query, $this->connection); > > > > if ($result) { > > echo (mysql_num_rows($result)); > > } > > > > The way I read the manual, the if() only fires off if the query is > > executed, and then by definition mysql_num_rows() should contain at > > least a 0. So why do I get this error? > > > > Warning: Supplied argument is not a valid MySQL result resource in > > C:\blah\class_test.inc on line 195 > > > > If I echo($result) it comes back as > > > > 1 > > The result of the query function is a "resource" NOT a boolean. > This situation is confusing because the prototype, ie the letter of the > law, in the manual (http://www.php.net/manual/en/function.mysql-query.php) > says "resource" but the explanatory text then goes on to talk about TRUE > and FALSE. You will find this elsewhere in PHP where the casual approach to > data-typing allows use/abuse of what some have been trained to see as > 'rules'! > > In fact if you drop in various echo/prints to monitor the process: > (warning: I've hacked out this code from within an existing application and > flattened out the function calls - so it may not run if you cut-and-paste, > as-is) > $WhereClause = 'Where phase=1 Order by search'; > $tablename = "tblPList_tst"; > if (DEBUG) echo " tbl=$tablename~"; > $query = "select * from $tablename ".$WhereClause; > if (DEBUG) echo "<br>Fn MySQLdbRead: Query=".$query; > $queryresourceresult = mysql_query($query, $dbLinkId); > if (DEBUG) echo "~Result=".$queryresourceresult; > $num_rows_read = mysql_num_rows($queryresourceresult); > if (DEBUG) echo "~ Num rows read=$num_rows_read"; > > In the browser you will see... > > 2001-10-12 10:46:06 Executing mainline B.php > FnConnectToDatabase~ > Fn MySQLdbOpen: LinkIdentifier =Resource id #1 Whereas Select db result =1 > FnFetchFirst~ tbl=tblPList_tst~ > Fn MySQLdbRead: Query=select * from tblPList_tst Where phase=1 Order by > search~Result=Resource id #2~Num rows read=1~ > > Thus the problematic code (as above) > if ($result) { > would, in this stub/example, become > if ("Resource id #2") { > > I must admit, most of the time I do NOT bother to check the query result > (of a Select). [greater minds might point out some shock-horror that I have > casually ignored] Instead I look at the Num-Rows function (in the case of a > MySQL Select command) because I am happy to accept a zero-or-more records > found response. > > Of course, if the query is being constructed dynamically, and particularly > from some user/foreign input, then this is much too casual even if the code > previously implements 'solid' filtering and error-checking precautions! In > such as case, more attention is required - as might be appropriate during > first stage prototyping in any case. During first-run debugging I might > look to see if the QueryResourceResult is false, because that would > indicate a syntactically invalid query (tip: most of the time I have > checked that by using a command line or MySQL admin tool to prototype the > dbquery conversation and when first writing the code I'm > copying-and-pasting from there into PHP). In which case one would invert > the test and make it thoroughly type-specific: if ( $result === false ) { > echo "invalid query - rejected by MySQL"; } > > Trust this helps, > =dn

« previous php.general (#70916) next »