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()を実行したと思います。その場合(行セットが返されない他の場合と同様に)、成功した場合は単なるブール値のTRUEであり、結果リソースではありません。それを解放する必要はありません、そして実際にそれを解放しようとすると警告が発生します。INSERTSELECT$result

上のドキュメントから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 に答える