Której funkcji PHP należy użyć, aby pobrać kolejny wiersz wyniku zapytania SELECT jako obiekt, którego właściwości mają nazwy kolumn?
mysqli_get_connection_stats()
mysqli_autocommit()
mysqli_fetch_object()
mysqli_fetch_row()
Poprawna jest funkcja mysqli_fetch_object(). Przy każdym wywołaniu pobiera kolejny wiersz wyniku i zwraca go jako obiekt, w którym nazwy kolumn stają się nazwami właściwości. Do wartości odwołuje się więc strzałką, np. $w = mysqli_fetch_object($wynik); echo $w->nazwisko;. Gdy wierszy zabraknie, funkcja zwraca null, co kończy pętlę while.
Do zapamiętania: ten sam wiersz można odczytać na trzy sposoby - mysqli_fetch_row() daje tablicę numerowaną ($w[0]), mysqli_fetch_assoc() tablicę z nazwami kolumn ($w['nazwisko']), a mysqli_fetch_object() obiekt ($w->nazwisko). Wybór zależy od wygody i stylu kodu.
W wersji obiektowej MySQLi odpowiada jej metoda $wynik->fetch_object(), wywoływana na obiekcie wyniku zapytania.
Najbliżej poprawnej jest mysqli_fetch_row(), bo też pobiera kolejny wiersz wyniku. Zwraca go jednak jako tablicę numerowaną, w której do kolumn odwołuje się indeksami: $w[0], $w[1]. Nazwy kolumn nie są w niej dostępne, więc zapis $w->nazwisko nie zadziała.
mysqli_autocommit() włącza lub wyłącza automatyczne zatwierdzanie zapytań, co ma znaczenie przy transakcjach, a nie przy odczycie danych. mysqli_get_connection_stats() zwraca statystyki połączenia, np. liczbę wysłanych i odebranych bajtów, przydatne przy diagnozowaniu wydajności. Żadna z tych dwóch funkcji nie zwraca rekordów. Pomaga przetłumaczenie nazw: fetch to „pobierz”, row - „wiersz”, a object - „obiekt”, więc nazwa poprawnej funkcji opisuje dokładnie postać, w jakiej otrzymuje się dane.
W wersji obiektowej MySQLi wszystkie te operacje wykonuje się metodami, np. $wynik->fetch_object() albo $wynik->fetch_row(). Warto znać oba zapisy, bo w gotowych projektach spotyka się zarówno styl proceduralny, jak i obiektowy, a w arkuszach egzaminacyjnych najczęściej ten pierwszy.