此代码在释放之前测试是否有结果:
$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
我做错了什么?
答案 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();