• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PDO - zmienna nie jest obiektem

Object Storage Arubacloud
+2 głosów
172 wizyt
pytanie zadane 8 kwietnia 2015 w SQL, bazy danych przez MatexQ Bywalec (2,260 p.)

Witam. Postanowiłem ze starego typu przejść na PDO i przerabiam wszystko na obiektowe. Problem mam taki, że połączenie z bazą mam w oddzielnym pliku

<?php
function db_connect(){
	
   try
   {
      $pdo = new PDO('mysql:host=localhost;dbname=tabela', 'root', '');
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      echo 'elo';
 
   }
   catch(PDOException $e)
   {
      echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
   }

}
?>

W pliku normalnym próbowałem wykonać na zmiennej $pdo metodę query, ale pokazuje, że zmienna nie jest obiektem. Includuje plik z funkcją na samym początku i wywołuje go. Wywoływałem go na kilka sposobów. Samą funkcję ( db_connect() ) oraz przypisując ją do zmiennej $pdo = db_connect(). Jeżeli w pliku gdzie wykonuję zapytanie do bazy umieszczę połączenie to wszystko działa jak należy. Prosiłbym o pomoc w rozwiązaniu tego problemu. Z góry dziękuję! :)

3 odpowiedzi

+1 głos
odpowiedź 8 kwietnia 2015 przez Harsay Pasjonat (23,640 p.)
edycja 8 kwietnia 2015 przez Harsay

Zasięg zmiennej $pdo jest tylko wyłączny wewnątrz funkcji db_connect()

Na twoim miejscu zrezygnowałbym z funkcji i łączył się z bazą danych w momencie "includowania" pliku, w którym tego dokonujesz. W takim wypadku zmienna $pdo będzie dostępna globalnie. Gdy zależy tobie na używaniu funkcji to możesz stworzyć zmienną globalną wewnątrz niej używając słowa kluczowego global.

global $pdo = ...;

Więcej o zasięgu zmiennych znajdziesz tutaj.

komentarz 8 kwietnia 2015 przez MatexQ Bywalec (2,260 p.)
Racja :) W trakcie udało mi się do tego dojść :)
0 głosów
odpowiedź 8 kwietnia 2015 przez Wally Bywalec (2,840 p.)

Słówko kluczowe: extern ?

Zmienna w pliku A nie jest widoczna w B. Komunikat, że zmienna nie jest obiektem świadczy o tym, że zmienna jest nullem. Możesz użyć extern żeby ta zmienna była widoczna.

0 głosów
odpowiedź 8 kwietnia 2015 przez MatexQ Bywalec (2,260 p.)

Zapomniałem całkowicie jak programować obiektowo :) 

Problem rozwiązany. Zmienna pdo w pliku z funkcją jest lokalna. Przed utworzeniem obiektu należy utworzyć ją globalnie 

global $pdo;
$pdo = new PDO('mysql:host=localhost;dbname=tabela', 'root', '');

Wtedy wystarczy, że tylko wywołam funkcję w pliku i wszystko :)

 

include_once("db_function.php");
db_connect();	

Podobne pytania

+1 głos
3 odpowiedzi 296 wizyt
pytanie zadane 17 maja 2016 w PHP przez niezalogowany
0 głosów
1 odpowiedź 282 wizyt
pytanie zadane 30 kwietnia 2017 w PHP przez Marduczek Użytkownik (520 p.)
0 głosów
2 odpowiedzi 211 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...