Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja pgp - Zapytanie do bazy danych, Problem z funkcją php
tarzinio
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.03.2016

Ostrzeżenie: (0%)
-----


Witam serdecznie. Chce sobie ułatwić sprawę odnośnie zapytań do bazy danych. Stworzyłem wiec funkcję, jednak przeglądarka wyrzuca mi błąd. Gdy ciało funkcji wyrzucę poza funkcję to wszystko jest ok. Co może być nie tak?

Funkcja:
  1. function db_select($zap){
  2. $z = $mysqli->query($zap);
  3. // zapisujemy wynik zapytania do tablicy asocjacyjnej
  4. $z = $z->fetch_assoc();
  5. //return $z;
  6. // zwalniamy pamięć z wyniku
  7. $z->free();
  8. }


Wywołanie funkcji
  1. $a = db_select("SELECT * FROM `tarzinio`");


Błąd jaki wyrzuca
  1. Fatal error: Call to a member function query() on a non-object in <TU ŚCIEŻKA> on line 26
  2. W LINI 66 ZNAJDUJE SIĘ $z = $mysqli->query($zap);


Powie mi ktoś co jest nie tak?sad.gif

Pozdrawiam smile.gif
Go to the top of the page
+Quote Post
kayman
post
Post #2





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


w funkcji nie ma deklaracji klasy mysqli
Go to the top of the page
+Quote Post
tarzinio
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.03.2016

Ostrzeżenie: (0%)
-----


Bo jest ona zdeklarowana wcześniej. A skoro mówię, że gdy wyrzuciłem ciało funkcji poza funkcję i w zmienną $zap dałem zapytanie to wszystko działało, to logiczne, że musiało być wcześniej zdeklarowana zmienna smile.gif

Ten post edytował tarzinio 8.03.2016, 21:07:38
Go to the top of the page
+Quote Post
kayman
post
Post #4





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


poczytaj o przestrzeniach nazw
Go to the top of the page
+Quote Post
tarzinio
post
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.03.2016

Ostrzeżenie: (0%)
-----


Jakoś mi to nie działa. Dałem przykład z http://blog.wilgucki.pl/2011/01/przestrzenie-nazw-w-php.html i lipa wywala błąd , ze nie jest pierwszą instrukcją, a dałem to na samą górę pliku.

Powie ktoś dokładniej co mogę zrobić by zaradzić temu?
Go to the top of the page
+Quote Post
kayman
post
Post #6





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


źle napisałem późno jest smile.gif

zasięg zmiennych

  1.  
  2. $mysqli = new mysqli('localhost', 'login', 'haslo', 'nazwa_bazy');
  3.  
  4. function db_select($zap, $mysqli){
  5. $z = $mysqli->query($zap);
  6. // zapisujemy wynik zapytania do tablicy asocjacyjnej
  7. $z = $z->fetch_assoc();
  8. //return $z;
  9. // zwalniamy pamięć z wyniku
  10. $z->free();
  11. }
  12.  
  13. $a = db_select("SELECT * FROM `tarzinio`", $mysqli);
  14.  


Ten post edytował kayman 8.03.2016, 21:24:09
Go to the top of the page
+Quote Post
tarzinio
post
Post #7





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.03.2016

Ostrzeżenie: (0%)
-----


Oo teraz rozumiem tongue.gif, a gdybym dał $mysqli jak zmienną globalną? Musiałbym wtedy dawać w funkcji drugą zmienną tą $mysqli?

Ten post edytował tarzinio 8.03.2016, 21:34:37
Go to the top of the page
+Quote Post
rad11
post
Post #8





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Możesz do tego użyć prosty wzorze singleton nie będziesz musiał za każdym razem tworzyć obiektu do łączenia się z baza danych.
Go to the top of the page
+Quote Post
tarzinio
post
Post #9





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.03.2016

Ostrzeżenie: (0%)
-----


Powiesz mi kolego jak to zrobić?smile.gif Bo chciałbym by działało samo funkcja(zapytanie); Bez podawania drugiej zmiennej. tongue.gif
Go to the top of the page
+Quote Post
rad11
post
Post #10





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


http://lukasz-socha.pl/php/wzorce-projektowe-cz-1-singleton/
Go to the top of the page
+Quote Post
tarzinio
post
Post #11





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.03.2016

Ostrzeżenie: (0%)
-----


Nigdy nie operowałem na klasach. Nie wiem co i jak.

Ten post edytował tarzinio 8.03.2016, 21:58:26
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Użyj poprostu global i nie cuduj


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
tarzinio
post
Post #13





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.03.2016

Ostrzeżenie: (0%)
-----


  1. function db_select($zap){
  2. global $mysqli;
  3. $z = $mysqli->query($zap);
  4. // zapisujemy wynik zapytania do tablicy asocjacyjnej
  5. $z = $z->fetch_assoc();
  6. return $z;
  7. // zwalniamy pamięć z wyniku
  8. //$z->free();
  9. }

Takie rozwiązanie działa. Dziękuje bardzo za pomoc smile.gif Na pewno wgryzę się w klasy i ogarnę pomysł kolegi smile.gif Dziękuje wam smile.gif

W sumie teraz mam inny problem. Funkcja
  1. function db_select($zap){
  2. global $mysqli;
  3. $z = $mysqli->query($zap);
  4. // zapisujemy wynik zapytania do tablicy asocjacyjnej
  5. $z = $z->fetch_array(MYSQLI_ASSOC);
  6. return $z;
  7. // zwalniamy pamięć z wyniku
  8. $z->free();
  9. unset($zap,$z);
  10. }


zwraca mi zawsze jedną wartość. Jak zorbić by zwracało mi całą tablice wyciągniętą z bazy? Tak mogę usunąć $z = $z->fetch_array(MYSQLI_ASSOC) ale wtedy mój print zwraca
  1. [current_field] => 0
  2. [field_count] => 1
  3. [lengths] =>
  4. [num_rows] => 32
  5. [type] => 0


zamiast pięknego array sad.gif

Zrobiłem coś takiego:
  1. function db_select($zap){
  2. global $mysqli;
  3. $z = $mysqli->query($zap);
  4. // zapisujemy wynik zapytania do tablicy asocjacyjnej
  5. //$z = $z->fetch_array(MYSQLI_ASSOC); //- wyciąga jedną zmienną
  6. $wynik = array();
  7. $num = 0;
  8. while ($wyn = $z->fetch_assoc()) {
  9. $wynik[$num]= $wyn;
  10. $num ++;
  11. }
  12. return $wynik;
  13.  
  14.  
  15. // zwalniamy pamięć z wyniku
  16. $z->free();
  17. unset($zap,$z, $wynik);
  18. }


Jednak pytanko. Da się to ładniej, schludniej napisać?

Ten post edytował tarzinio 8.03.2016, 23:02:56
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 09:08