خطای result set not freed چیست؟
خطای PHP Warning: Unknown: 1 result set(s) not freed هنگام اجرای اسکریپتهای PHP که از MySQL استفاده میکنند رخ میدهد. این خطا نشاندهنده عدم آزادسازی نتایج کوئری پس از استفاده است.
دلیل خطا
وقتی یک کوئری MySQL اجرا میشود و نتیجه در متغیری ذخیره میشود اما پس از استفاده mysql_free_result() فراخوانی نمیشود، PHP این هشدار را نمایش میدهد. این مشکل بهخصوص در کدهای قدیمی PHP که از توابع mysql_* (منسوخشده) استفاده میکنند رایجتر است.
روشهای رفع
روش ۱: استفاده از mysql_free_result
پس از هر کوئری، نتیجه را آزاد کنید:
$result = mysql_query("SELECT * FROM table");
// استفاده از نتایج...
mysql_free_result($result);
روش ۲: مهاجرت به MySQLi یا PDO
توابع mysql_* از PHP 7.0 حذف شدهاند. از MySQLi یا PDO استفاده کنید:
$mysqli = new mysqli("localhost", "user", "pass", "db");
$result = $mysqli->query("SELECT * FROM table");
// استفاده از نتایج...
$result->free();
روش ۳: غیرفعال کردن نمایش Warning
اگر نمیتوانید کد را تغییر دهید، Warning را موقتاً مخفی کنید:
error_reporting(E_ALL & ~E_WARNING);
یا در php.ini:
error_reporting = E_ALL & ~E_WARNING
توجه: این راهحل موقتی است و مشکل اصلی را حل نمیکند.
پیشگیری
همیشه نتایج کوئری را آزاد کنید. از توابع مدرن MySQLi یا PDO استفاده نمایید. کدهای قدیمی را به PHP 8.x مهاجرت دهید.
هاست وردپرس میهن هاستینگ با PHP 8.x بهینهشده ارائه میشود. اگر سرور مجازی دارید، کانفیگ سرور شامل بهینهسازی PHP و MySQL نیز میشود.