Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP PDO w innych plikach.
Forum PHP.pl > Forum > PHP
Utilaft
Witam.

W indexie includuję sobie config, a w configu mam takie cośik;

  1. $hostdb = 'localhost';
  2. $namedb = 'uti';
  3. $userdb = 'uti';
  4. $passdb = '********';
  5.  
  6.  
  7. try {
  8. $db = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
  9. }
  10. catch(PDOException $e) {
  11. echo 'Wystąpił błąd w połączeniu: ' . $e->getMessage();
  12. }
  13.  


problem w tym, że jak chcę w innym pliku zrobić zapytanie ($lala = exec("INSERT INTO users SET login = '$login', password = '$password', email = '$email', date = now()")wink.gif

to po prostu nie widzi mi zmiennej $db z config.

Jak mogę to sensownie rozwiązać?

Pozdrawiam ; ))
q3trm
Dopiero zaczynam z PDO i z tego co się orientuję, to poza blokiem try{} nie istnieję instancja PDO. Rozwiązaniem jest - wykonywanie poleceń w pliku z PDO i przekazywanie wyników do własnej klasy w końcu PDO ma świetnie przystosowane do tego metody.
Fifi209
Pod:
  1. $db = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);


Dodaj:
  1. return $db;


Powinno śmigać
Crozin
@q3trm: W PHP blok try..catch nie wpływa na widoczność/zasięg zmiennych.
@Utilaft: Pokaż przykład (najlepiej SSCCE) z dwoma plikami i występowaniem błędu.
Utilaft
No variable bla.. że nie znaleziono zmiennej, jeśli poproszę o wyświetlenie $db w innym pliku.

Notice: Undefined variable: db in E:\xampp\htdocs\class\UserManager.class.php on line 38

Fatal error: Call to a member function query() on a non-object in E:\xampp\htdocs\class\UserManager.class.php on line 38



@up, po dodaniu returna, takie cosik:

Warning: include_once(MainPage.class.php): failed to open stream: No such file or directory in E:\xampp\htdocs\config.php on line 31

Warning: include_once(): Failed opening 'MainPage.class.php' for inclusion (include_path='.;E:\xampp\php\PEAR') in E:\xampp\htdocs\config.php on line 31

Fatal error: Class 'MainPage' not found in E:\xampp\htdocs\index.php on line 10


Załączam plik config.php, MainPage.class.php, UserManager.class.php


http://wklej.to/H53Ht




dzastin
Skoro już piszesz obiektowo, to zrób klasę bazy jako singleton, coś w stylu (pisane z palca bez ide):

  1. class db{
  2.  
  3. protected static $instance;
  4.  
  5. protected function __construct(){
  6.  
  7. }
  8.  
  9. public function getInstance(){
  10. if(self::$instance === null){
  11. self::$instance = new pdo();
  12. }
  13. return self::$instance
  14. }
  15.  
  16. }


a potem to już wszędzie

  1. db::getInstance()->query();
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.