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

PDO - zmienna nie jest obiektem

Aruba Cloud - Virtual Private Server VPS
+2 głosów
226 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 429 wizyt
pytanie zadane 17 maja 2016 w PHP przez niezalogowany
0 głosów
1 odpowiedź 478 wizyt
pytanie zadane 30 kwietnia 2017 w PHP przez Marduczek Użytkownik (520 p.)
0 głosów
2 odpowiedzi 268 wizyt

93,324 zapytań

142,323 odpowiedzi

322,390 komentarzy

62,653 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...