Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wywołanie function w class dla pdo
Forum PHP.pl > Forum > Przedszkole
troian
Witam, jak tytył tematu jakoś źle napisałem to przepraszam ale nie wiedziałem jak go zdefiniować, oto mój problem,
mam stworzoną głowną klase
  1. class web{ ... }


wewenątrz klasy znajdują się dwie funkcje, pierwsza to connect_pdo()
  1. public static function connect_pdo()
  2. {
  3. try {
  4. $connect=new PDO('mysql:host='.host.';port='.port, user, pass);
  5. $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6. }
  7. catch(DBException $e) {
  8. exit('Blad polaczenia: ' . $e->getMessage());
  9. return false;
  10. }
  11. }


oraz druga funkcja register()
Kod
    public static function register()
    {
    (...)
    }


i tutaj napotkałem problem, wczesniej do wywołania zapytania mysql pisałem:
  1. $test_query = $connect->query("SELECT login FROM baza_1.account WHERE login='".$login."' OR email ='".$email."' LIMIT 1");


Jednak teraz taki myk nie zadziała i dlatego piszę tutaj gdyż nie bardzo wiem jak mam wykonać funkcję connect_pdo() aby wykonało mi ów zapytanie z funkcji register.
nospor
Skoro to jest wszystko w jednej klasie to zajrzyj do manuala i poczytaj o wlasciwosciach klasy i $this->

Ale tak czy siak masz blad logiczny, bo obiekt PDO ma byc do klasy przekazywany z zewnatrz a nie tworzony w klasie.
bobek358
Dlaczego chcesz wywoływać połączenie metodą statyczną?
Rozumiem że klasa Web jest główną klasą więc możesz śmiało utworzyć konstruktor w niej i dać tam połączenie do DB.

  1. class web {
  2. private $dbh;
  3.  
  4. public function __construct($dbHost, $dbName, $dbUser, $dbPassword)
  5. {
  6. try
  7. {
  8. $this -> dbh = new PDO("mysql:host=$dbHost;dbname=$dbName", "$dbUser", "$dbPassword", array(
  9. PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  10. $this -> dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  11.  
  12. }
  13. catch(PDOException $e)
  14. {
  15. exit('Blad polaczenia: ' . $e->getMessage());
  16. }
  17. }
  18. }


i wtedy w klasie odwołujesz się przez:

  1. $stmt = $this -> dbh -> prepare('SELECT * FROM `configurations`');
  2. $stmt -> execute();
troian
Właśnie sam się zastanowiłem co napisałem happy.gif Rozdzieliłem to na 2 klasy, i teraz już mi wszystko działa, swoją drogą kiedy chce stosować $this-> wywala mi zawsze error nie wiem czemu :/ nawet jak skopiuje jakiś gotowy kod i wkleje to mam error.
nospor
Jak ci sie pojawia error to moj ty mistrzu trzeba go nam pokazac.... wrozek nie ma, duze dzieci powinny juz wiedziec takie rzeczy tongue.gif

No ale strzelam: $this w static nie dziala raczej smile.gif
troian
Cytat(nospor @ 4.08.2015, 11:41:45 ) *
Jak ci sie pojawia error to moj ty mistrzu trzeba go nam pokazac.... wrozek nie ma, duze dzieci powinny juz wiedziec takie rzeczy tongue.gif

No ale strzelam: $this w static nie dziala raczej smile.gif


Problem rozwiązany smile.gif
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.