2009-04-23 108 views
6

我有这样的代码:检查有效的MySQL结果资源

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

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

$someQuery是我写的形式任意查询。当我编写一个带有错误的mysql查询时,mysql_errno捕获了大小写。但是,我刚刚发现,当我执行“Delete from table_name”查询时,它当然不是错误,但同时mysql_fetch_assoc失败,并显示“Warning:mysql_num_rows():提供的参数不是有效的MySQL结果第x行/blah/blah/file.php中的资源“。

我试图寻找它的说明书(也许我只是盲目的......)中但有我可以用它来检查$水库是一个有效的MySQL结果资源或不是一个函数?

+0

的可能重复的[警告:mysql_fetch_ *预计参数1是资源,布尔给定的错误(http://stackoverflow.com/questions/11674312/warning-mysql-fetch-expects-parameter-1-to-be -resource-boolean-given-error) – j0k 2012-07-30 12:30:12

回答

7

if ($res)应该可以正常工作,检查它是否是一个资源。 is_resource()将决定它是否有效的资源。

你也可以查看mysql_affected_rows尝试以确定它是否是一个INSERT/UPDATE /等

0

如果您通过mysql_query进行INSERT,UPDATE,DELETE或DROP,那么它将只返回truefalse(取决于操作是否成功)。

我不知道你所期待包含在这种情况下的资源?

如果您需要受影响的行数,你可以使用mysql_affected_rows()

2

mysql_query()返回truefalse这样你就可以检查一下这种方式:

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

尽管对于所描述的问题,情况确实如此,但它有点误导。如果查询以某种方式改变数据库(DELETE,INSERT,DROP等),mysql_query()返回true或false。但是如果查询是SELECT,SHOW,DESCRIBE或EXPLAIN,它将返回一个资源。 – 2009-04-23 19:28:55

0

也许只是改变了条件到:

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

如果没有行,条件将失败,@将s压制警告。

3

随着is_resource()可以使用get_resource_type()来检查它是否是一个MySQL的资源。

$res_type = is_resource($res) ? get_resource_type($res) : gettype($res); 

if(strpos($res_type, 'mysql') === false) { 
    echo 'Invalid resource type: ' . $res_type; 
} 

get_resource_type()可能会因您的连接类型返回"mysql link""mysql link persistent"

+1

如果谷歌带来任何人,上述警告抑制技术不适用于资源类型“”odbc链接“`。 – 2012-05-15 01:07:38

相关问题