mysql_free_result(); 관련 오류

by 조쉬 posted Mar 25, 2021
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
 
Warning: Unknown: 1 result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query() in Unknown on line 0

mysql_query()라는 함수를 써주면 질의의 결과가 메모리에 남게 된다.
그래서 이 질의 결과를 메모리에서 해제 시켜주기 위해 존재하는 함수가 mysql_free_result()이다.

필자의 경험상 mysql_query()함수를 쓴뒤 mysql_free_result()를 써주지 않아도 오류로 웹페이지가 안뜨거나 하는일은 없었다. 하지만, 위의 오류 처럼 "mysql_query()를 썼으면 그걸 해제해주세요~" 라는 식으로 경고 메세지가 뜬다.

웹서핑을 해도 위와 같은 오류일때는, 오류문구를 안뜨게 하면 그만이라는 식의...
" mysql.trace_mode = Off 하세요" 라는내용만 나오길래 짜증나서 이글을 써본다. (이게 알아보니 php메뉴얼의 아래 글중에도 이러라고 되어 있는거 같다.ㅡ.ㅡ; )

저 오류는 보통
$result = mysql_query("select * from testdb");
라는 식의 함수를 쓴뒤
mysql_free_result($result);
라고 메모리 해제를 해주지 않았기에 뜨는 오류이다.


추가사항(2011.04.08)
select 질의문이 아닌, update, delete, insert와 같은 질의를 해도 나오는 결과물이 성공 또는 실패 정도만 나오는 질의문인 경우에는 해당 함수로 메모리 해제를 해줄 필요가 없다.
어찌 보면 당연한 얘기지만, 필자의 경우 질의문이 많이 모여 있는 페이지를 작성시에 모든 질의의 결과를 $result와 같은 하나의 변수에다가 다 처리한뒤 맨 아래에 mysql_free_result()로 한번만 처리를 해주곤 한다. 아마 다른 분들도 이런식으로 한번에 처리 하시는 분들이 많을것이라고 본다.
하지만 이럴경우 가장 마지막에 실행한 질의가 update문이었다고 하고, 그 질의의 올바른 실행여부를 판단하기 위해서 여전히 $result 변수를 썼다면, 이것은 오히려

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource ... 오류페이지..

와 같은.. mysql_free_result() 함수에 들어간 파라미터가 올바르지 않다는 식의 오류가 뜨게 된다.