$stmt->free_result() uvolňuje paměť související se sadou výsledků, zatímco $stmt->close() uvolní paměť související s připraveným příkazem. Následně volání $stmt->close() zruší všechny zbývající výsledky.
V podstatě volání $stmt->close() poskytne stejný efekt jako volání $stmt->free_result() protože zruší také sadu výsledků. Ale volání $stmt->free_result() nevyčistí paměť použitou připraveným příkazem, v takovém případě musíte použít $stmt->close() .
Pokud jde o to, který z nich použít, mohou nastat situace, kdy máte v úmyslu použít připravený příkaz, který jste inicializovali, ale již nepotřebujete sadu výsledků, kterou aktuálně máte. V takovém případě byste čekali na volání $stmt->close() dokud nebudete hotovi s připraveným příkazem a místo toho zavoláte $stmt->free_result() před provedením dalšího příkazu.