mysql_result已定义,但mysql_free_result警告它预期资源

时间:2012-04-12 15:30:44

标签: php mysql

此代码在释放之前测试是否有结果:

$result = mysql_query($query) or die("$query\n\n" . mysql_error());
$id = mysql_insert_id();
if ($result) { mysql_free_result($result); }

但它给出了这个警告:

mysql_free_result() expects parameter 1 to be resource, boolean given in /foo/bar/etc.php

我做错了什么?

1 个答案:

答案 0 :(得分:2)

由于您已拨打mysql_insert_id(),我认为您执行了INSERT个查询而不是SELECT。在这种情况下(与其他没有返回行集的情况一样),$result仅仅是成功时的布尔值TRUE,而不是结果资源。没有必要释放它,并且确实试图释放它会导致警告。

From the documentation on mysql_query():

  

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,或者在出错时返回FALSE。

     

对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,mysql_query()成功时返回TRUE,错误时返回FALSE。

但是,这并不意味着您不应该对其进行错误检查。

$result = mysql_query($query);
if ($result) {
  $id = mysql_insert_id();
}
else echo mysql_error();