0

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

$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

我究竟做错了什么?

4

1 回答 1

2

由于您已调用mysql_insert_id(),我假设您执行了INSERT查询而不是SELECT. 在那种情况下(与其他没有返回行集的情况一样),$result它只是成功的布尔值 TRUE,而不是结果资源。没有必要释放它,实际上尝试释放它会导致警告。

从文档中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();
于 2012-04-12T15:40:53.160 回答