mysql_close fonksiyonunu sorgunun sonunda kullanıyorsunuzdur zaten, dolayısı ile sorgu yapılmış hafızaya alınmıştır, mysql_close kullansanız bile sorgu hafızaya alındığı için sonraki işlemler geçerlidir, ancaaakk... mysql_free_result kullansaydınız sonraki işlemlerden sonuç alamayabilirdiniz.
Birde mysql_close ve mysql_free_result ile alakalı herkes çok yanlış şeyler biliyor, mysql_close ile her sorgudan sonra bağlantıyı kapatıp aynı sayfada diğer sorguyu başlatma tıpkı şuna benziyor, bir arabanın sürekli durup kalkış yapması gibi.. Araba en çok frende ve kalkışda benzin yakar, buda tıpkı onun gibi birşey, PHP yorumlayıcısı sayfanın gösterimi bittiği zaman otomatik olarak bağlantıyı zaten kapatıyor, yani sizin o bağlantıyı her sorguda kapatmanıza gerek yok, ancak şöyle durumlarda bu fonksiyon çok iş görecektir, mesela bir php sayfası ile birkaç sayfa gösterecekseniz (switch case usulü vs.) işte o zaman mysql_close yararlı olacaktır.
mysql_free_result ise şöyle durumlarda kullanılmalıdır, örneğin bir sorgu ram üzerinde gerçekten fazla yük bindirecekse böyle durumlarda kullanılması iyidir, fakat bir iki tablodan birkaç sütun veri çekilecekse bu fonksiyonu kullanmak çok anlamsız, çünkü sayfa görüntülendiği anda zaten hafızaki sorgu otomatik olarak mysql_free_result olmuş oluyor