Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Połączenie z MySQL w funkcji
Forum PHP.pl > Forum > Przedszkole
Laxus
Witam.

Mam taki mały problem. Napisałem sobie takiego twora w pliku connect.php:

  1. <?php
  2.  
  3. $db_host = 'localhost';
  4. $db_usr = 'root';
  5. $db_pass = '';
  6. $db_name = 'test';
  7.  
  8. function db_connect( $host, $user, $password, $name ) {
  9.  
  10. try {
  11.  
  12. $mysqli = new Mysqli( $host, $user, $password, $name );
  13. $mysqli -> set_charset( 'utf8' );
  14.  
  15. } catch( Exception $e ) {
  16.  
  17. echo 'ERROR: ' . $e -> getMessage();
  18.  
  19. }
  20.  
  21. }
  22.  
  23. ?>


Następnie w pliku lista_kontrahentow.php wywołuję funkcję db_connect i tworzę funkcję wykonującą zapytanie:
  1. <?php
  2.  
  3. include_once( 'connect.php' );
  4. db_connect( $db_host, $db_usr, $db_pass, $db_name );
  5.  
  6. function wyswietl_kontrahentow() {
  7.  
  8. $sql = $mysqli -> query( "SELECT * FROM kontrahenci" );
  9.  
  10. }
  11.  
  12. ?>


W jeszcze osobnym pliku kontrahenci.php wywołuję funkcję wyświetl_kontrahentow:
  1. <?php
  2.  
  3. include_once( 'lista_kontrahentow.php' );
  4.  
  5. wyswietl_kontrahentow();
  6.  
  7. ?>


W rezultacie dostaję alerty:

Notice: Undefined variable: mysqli in C:\xampp\htdocs\test\subpages\lista_kontrahentow.php on line 8

Fatal error: Call to a member function query() on null in C:\xampp\htdocs\test\subpages\lista_kontrahentow.php on line 8


Jak w pliku connect.php wprowadzę jakieś niepoprawne dane do połączenia z bazą, to przy wywołaniu funkcji db_connect w innym pliku wywala alerty, więc działa blok try... catch.
Domyślam się, że problem dotyczy zasięgu zmiennych w funkcjach. Próbowałem dopisać return $mysqli na koniec bloku try w funkcji db_connect, lecz nic mi to nie daje.
Jak mam to naprawić?
Lord
nie zwracasz ani nieprzekazujesz zmiennej $mysqli

ona jest widoczna tylko w zakresie funkcji

db_connect() a potem nie mam prawa jej nikt widzieć
Pyton_000
$mysqli nie jest widoczne w funkcji, musisz ją przekazać jako parametr.

I to co wyżej kolega. Nie zwracasz $mysql spoza connect.
Laxus
OK. Chyba już rozumiem.
Poprawiłem w ten sposób i błędów nie ma:

connect.php
  1. <?php
  2.  
  3. $db_host = 'localhost';
  4. $db_usr = 'root';
  5. $db_pass = '';
  6. $db_name = 'test';
  7.  
  8. function db_connect( $host, $user, $password, $name ) {
  9.  
  10. try {
  11.  
  12. $mysqli = new Mysqli( $host, $user, $password, $name );
  13. $mysqli -> set_charset( 'utf8' );
  14. return $mysqli;
  15.  
  16. } catch( Exception $e ) {
  17.  
  18. echo 'ERROR: ' . $e -> getMessage();
  19.  
  20. }
  21.  
  22. }
  23.  
  24. ?>


lista_kontrahentow.php
  1. <?php
  2.  
  3. include_once( 'connect.php' );
  4.  
  5.  
  6. function wyswietl_kontrahentow( $db_host, $db_usr, $db_pass, $db_name ) {
  7.  
  8. $mysqli = db_connect( $db_host, $db_usr, $db_pass, $db_name );
  9. $sql = $mysqli -> query( "SELECT * FROM kontrahenci" );
  10.  
  11. }
  12.  
  13. ?>


kontrahenci.php
  1. <?php
  2.  
  3. include_once( 'lista_kontrahentow.php' );
  4.  
  5. wyswietl_kontrahentow( $db_host, $db_usr, $db_pass, $db_name );
  6.  
  7. ?>

viking
Troszkę masz bez sensu wyswietl_kontrahentow bo jak już to powinno przyjmować gotowy obiekt mysqli a nie całą konfigurację bazy. A najlepiej tylko dane specyficzne czyli np jakieś warunki filtrowania.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.