• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kurs PHP odc. 2: System logowania do strony - problem z obiektem $rezultat

VPS Starter Arubacloud
0 głosów
453 wizyt
pytanie zadane 29 grudnia 2020 w Programowanie przez KrzysztofS Nowicjusz (170 p.)
zmienione kategorie 29 grudnia 2020 przez KrzysztofS

Cześć!

 

W lekcji 2 videokursu PHP pana Mirosława mam problem ze zrozumieniem pewnego zagadnienia. Chodzi o zmienną $rezultat pojawiającą się w okolicy 40-tej minuty nagrania. Pan Mirosław na początku nazywa ją zmienną, a później poprawia się na "obiekt" i to jest chyba właściwsze, bo potem wskazany jest po niej atrybut num_rows... No właśnie, i tu mam problem.

O ile z obiektem $połączenie rozumiem to tak, że jest on obiektem należącym (niejako) do klasy mysqli, która dzięki dołączonemu rozszerzeniu ma już wbudowane atrybuty (np. connect_error, connect_errno) i metody (np. query()  ), no to z tej strony:

 

https://www.php.net/manual/en/book.mysqli.php

...wynika, że num_rows jest atrybutem nie klasy mysqli, a klasy mysqli_stmt, Tylko, że w tejże linii:

$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);

stworzono obiekt $połączenie w klasie mysqli. A jak to się stało, że powstał obiekt $rezultat w klasie mysqli_stmt, krórej nigdzie nie ma w kodzie i jakim cudem ten obiekt został zadeklarowany w środku if'a (no bo nigdzie wcześniej w kodzie się nie pojawia):

if ($rezultat = @$polaczenie->query($sql))

Jak to się stało, że to:

$rezultat->num_rows;

...w ogóle tu zadziała jako atrybut klasy mysqli_stmt? :(

1 odpowiedź

0 głosów
odpowiedź 29 grudnia 2020 przez Arkadiusz Waluk Ekspert (289,230 p.)
wybrane 29 grudnia 2020 przez KrzysztofS
 
Najlepsza

Słusznie zauważyłeś, że w $polaczenie jest tworzony obiekt klasy mysqli. Następnie jednak wykonujesz na obiekcie $polaczenie metodę query()https://www.php.net/manual/en/mysqli.query.php Ta metoda, jak widać w dokumentacji, może zwracać różne rzeczy, w tym dla zapytania select zwraca obiekt klasy mysqli_result. Tu przypisujesz go do zmiennej $rezultat. I wtedy dopiero na zmiennej $rezultat jest dostępne num_rows.

Także po prostu metoda zwróciła obiekt tej klasy i na nim robisz kolejne operacje. To już nie jest obiekt klasy mysqli, tylko obiekt mysqli_result zwrócony przez metodę query().

Podobne pytania

0 głosów
1 odpowiedź 244 wizyt
0 głosów
2 odpowiedzi 215 wizyt
pytanie zadane 28 grudnia 2015 w SQL, bazy danych przez ormu16 Gaduła (4,980 p.)
0 głosów
0 odpowiedzi 266 wizyt

93,078 zapytań

142,041 odpowiedzi

321,445 komentarzy

62,422 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...