views:

1709

answers:

5

I have this code:

$rows = array();
$res = mysql_query($someQuery);

if(!mysql_errno())
    while($row = mysql_fetch_assoc($res))
        $rows[] = $row;

some query is an arbitrary query that I write in to a form. The mysql_errno catches the case when I write a mysql query with errors in it. But, I just discovered that when I do a "Delete from table_name" query, it of course is not an error, but at the same time the mysql_fetch_assoc fails with a "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /blah/blah/file.php on line x".

I've tried to look for it in the manual (maybe I'm just blind...) but is there a function I can use to check if $res is a valid MySQL result resource or not?

A: 

If you INSERT, UPDATE, DELETE or DROP via mysql_query then it will only return true or false (depending on success of operation).

I'm not sure what you are expecting the resource to contain in this instance?

If you need the number of affected rows, you can use mysql_affected_rows().

BrynJ
+2  A: 

if ($res) should work fine to check if it's a resource. is_resource() will determine if its a valid resource at all.

You could also check mysql__affected__rows to try to determine if it's an INSERT/UPDATE/etc

Matt
+2  A: 

mysql_query() returns true or false so you can check it this way:

if($res){
  // The query succeeded.
}

http://de3.php.net/manual/en/function.mysql-query.php

Lennart
While this is true for the case the question described, it is a little mis-leading. mysql_query() returns true or false if the query altered the database in some way (DELETE, INSERT, DROP, etc.). But if the query is SELECT, SHOW, DESCRIBE, or EXPLAIN, it returns a resource.
Andrew
A: 

Perhaps just change the condition to:

if(!mysql_errno() && @mysql_num_rows($res) > 0)

The conditional will fail if there's no rows, and @ will suppress the warning.

Randy
A: 

Check http://www.lampdocs.com/blog/2010/10/how-to-check-that-a-php-variable-is-a-mysql-resource/ for the solution. Hope this helps.

Vladimir