Mam taki mały problem. Napisałem sobie takiego twora w pliku connect.php:
<?php $db_host = 'localhost'; $db_usr = 'root'; $db_pass = ''; $db_name = 'test'; function db_connect( $host, $user, $password, $name ) { try { $mysqli = new Mysqli( $host, $user, $password, $name ); $mysqli -> set_charset( 'utf8' ); } catch( Exception $e ) { } } ?>
Następnie w pliku lista_kontrahentow.php wywołuję funkcję db_connect i tworzę funkcję wykonującą zapytanie:
<?php include_once( 'connect.php' ); db_connect( $db_host, $db_usr, $db_pass, $db_name ); function wyswietl_kontrahentow() { $sql = $mysqli -> query( "SELECT * FROM kontrahenci" ); } ?>
W jeszcze osobnym pliku kontrahenci.php wywołuję funkcję wyświetl_kontrahentow:
<?php include_once( 'lista_kontrahentow.php' ); wyswietl_kontrahentow(); ?>
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ć?