Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MySQLi i inna klasa
Forum PHP.pl > Forum > Przedszkole
frydry
Witam.
Od niedawna zacząłem korzystać z biblioteki MySQLi i mam drobny problem.
Otóż przy tworzeniu instancji klasy MySQLi w pliku konfiguracyjnym php i zainkludowaniu go do index.php nie mam problemu, żeby wykonywać zapytania wykorzystując zmienną do której przypisałem klasę. Jednak problem jest, gdy chcę wykonać zapytanie w metodzie innej klasy. Muszę wtedy wykonywac połączenie do bazy danych drugi raz, a jest to dość uciążliwe i kiepskie rozwiązanie.
Jaka jest na to rada albo najlepsze rozwiązanie?
nospor
Najgorsze: GLOBAL - manual -> zasieg zmiennych
Ciut lepsze: SINGLETON -> google
Najlepsze: Dependency Injection -> google
frydry
ten global manual nie działa, albo znalazłem nie to co trzeba.

Natomiast tego Dependency Injection nie rozumiem. To znaczy tyle co się dowiedziałem o tym to nie ma sensu stosowanie tego przy moim problemie, bo w sumie wyjdzie na to samo. Chyba, że znalazłem tylko jakieś podstawy na ten temat. :/

Chodzi mi poprostu o to żebym mógł w swojej metodzie klasy wykonać zapytanie przez mysqli:
  1. //plik config.php
  2. $mysqli = new MySQLi('host', 'user', 'pass', 'db');
  3.  
  4. // plik z klasą
  5. class Klasa {
  6. function Funkcja($zmienna) {
  7. $mysqli->query("INSERT INTO tabela (kolumna) VALUES ('$zmienna'));
  8. }
  9. }

Jakbyś mógł mi pokazać jakiś prosty sposób ;-;
nospor
global dziala. Jak ci nie dziala znaczy ze zle uzywasz.
I nie DI ma u ciebie jak najbardziej zastosowanie. Widac znowu zle do tego podchodzisz. Poczytaj troche dluzej o tym
Pyton_000
DI w skrócie:

  1. <?php
  2.  
  3. //plik config.php
  4. $mysqli = new MySQLi('host', 'user', 'pass', 'db');
  5.  
  6. // plik z klasą
  7. class Klasa
  8. {
  9. protected $connection = null;
  10.  
  11. public function __construct($connction)
  12. {
  13. $this->connection = $connction;
  14. }
  15.  
  16. public function query($zmienna) {
  17. $this->connection->query("INSERT INTO tabela (kolumna) VALUES ('$zmienna')");
  18. }
  19. }
nospor
@Pyton a gdzie tu skrot? Wlasnie koledze zreferowales cale DI biggrin.gif
frydry
Cytat(Pyton_000 @ 25.11.2015, 17:54:05 ) *
DI w skrócie:

  1. <?php
  2.  
  3. //plik config.php
  4. $mysqli = new MySQLi('host', 'user', 'pass', 'db');
  5.  
  6. // plik z klasą
  7. class Klasa
  8. {
  9. protected $connection = null;
  10.  
  11. public function __construct($connction)
  12. {
  13. $this->connection = $connction;
  14. }
  15.  
  16. public function query($zmienna) {
  17. $this->connection->query("INSERT INTO tabela (kolumna) VALUES ('$zmienna')");
  18. }
  19. }


Takie coś to sa wykombinowałem, tylko że to nie działa.... -,-
nospor
To pokaz dokladnie jak to zrobiles, bo pewnie zrobiles to zle.
I nie pisz "nie dziala" tylko napisz DOKLADNIE na czym polega nie dzialanie

Przenosze
frydry
Działa.
Wstawiłem:
  1. $Register = new Account(new mysqli('host', 'user', 'pass', 'db'));

zamiast
  1. $Register = new Account($mysqli);

z sql_config.php
Pyton_000
a CO nie działa?
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.