Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego zamykamy wynik w Mysqli

Twoje sprawdzenie, czy połączenie nie powiodło się, przechodzi do kodu, który korzysta z połączenia. Oczywiście to nie zadziała, ponieważ nie jest to połączenie na żywo. Upewnij się, że jeśli połączenie się nie powiedzie, kod od niego zależny nie zostanie osiągnięty. (Zauważ, że nie muszę zalecać używania wyjścia lub śmierci. Mogą one powodować raczej złe wrażenia użytkownika. Mogą być przydatne, ale najlepiej byłoby wyświetlić lepszą wiadomość i pozostawić brzydkie błędy w dziennikach [chyba że ty' tylko testowanie lub jest to skrypt wiersza poleceń]).

Co do close() (co jest właściwie aliasem dla free()):

free() zasadniczo zwalnia wszystkie rzeczy dołączone do wyniku. Musisz zrozumieć, że istnieją dwa (uproszczenie, ale idź za tym) sposoby pobierania wierszy:

Buforowane — wszystko zostaje wyrwane za jednym zamachem. Innymi słowy, zanim zaczniesz przeglądać rekordy, wszystkie są już w pamięci. Są buforowane . Nie są one pobierane z serwera za każdym razem, gdy wywołujesz fetch(), ale raczej są pobierane z pamięci.

Niebuforowany — może być mały bufor, ale zasadniczo za każdym razem, gdy wywołujesz fetch(), PHP musi pobrać nowy wiersz z bazy danych. Na początku pętli nie wszystkie znajdują się w pamięci.

Interesująca uwaga:funkcja num_rows() może być wywołana w buforowanym zapytaniu bardzo wydajnie, ponieważ wszystkie wiersze są już ściągnięte (chociaż nigdy nie powinieneś ściągać wszystkich wierszy tylko po to, aby je policzyć - po to jest COUNT). Zapytania niebuforowane nie mogą wykonywać num_rows() dopóki nie ściągną wszystkich wierszy. Oznacza to, że albo będzie to błąd, albo zasadniczo zmieni to w buforowane zapytanie.

W każdym razie wróćmy do twojego aktualnego pytania:

free() zwalnia wszystko, co jest związane z obiektem wynikowym. W przypadku zapytania buforowanego są to dowolne wiersze znajdujące się w pamięci. W przypadku zapytania niebuforowanego free() zwolni wszystkie wiersze, które mogą znajdować się w pamięci, a następnie anuluje resztę żądania. Zasadniczo PHP mówi MySQLowi:„Hej, znasz wszystkie te wiersze, o które proszę? Zmieniłem zdanie. Możesz po prostu odrzucić to żądanie”.

A co do uwolnienia wyników... Cóż, za każdym razem, gdy zmienna wyjdzie poza zakres*, to i tak się stanie. Nie ma jednak nic złego w robieniu tego wprost, a w sytuacjach, gdy zapytanie może zużywać dużo pamięci, a następne zapytanie po nim może zużywać dużo pamięci, możesz chcieć zwolnić zestawy, aby utrzymać niskie zużycie pamięci .

* A może kiedy prośba się skończy. Nie pamiętam z czubka głowy.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql | Żądanie z pustej kolumny i FIND_IN_SET

  2. Wstawianie milionów rekordów z hostingu lokalnego do hostingu godaddy

  3. Przygotowana instrukcja C# + MySQL z problemami z DUPLICATE KEY UPDATE

  4. Użyj relacyjnych baz danych MySQL w Fedorze 14

  5. Pobieranie liczby wierszy wstawiania/aktualizacji z ON DUPLICATE KEY UPDATE