• 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 VPS - 50% taniej przez 3 miesiące!
+2 głosów
216 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 417 wizyt
pytanie zadane 17 maja 2016 w PHP przez niezalogowany
0 głosów
1 odpowiedź 429 wizyt
pytanie zadane 30 kwietnia 2017 w PHP przez Marduczek Użytkownik (520 p.)
0 głosów
2 odpowiedzi 259 wizyt

93,172 zapytań

142,184 odpowiedzi

321,965 komentarzy

62,496 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 918p. - dia-Chann
  2. 902p. - Łukasz Piwowar
  3. 901p. - CC PL
  4. 894p. - Łukasz Eckert
  5. 872p. - Michal Drewniak
  6. 867p. - Marcin Putra
  7. 858p. - rafalszastok
  8. 856p. - rucin93
  9. 842p. - Dawid128
  10. 840p. - Adrian Wieprzkowicz
  11. 830p. - Piotr Aleksandrowicz
  12. 826p. - Michał Telesz
  13. 819p. - Mariusz Fornal
  14. 814p. - Mikbac
  15. 812p. - TheLukaszNs
Szczegóły i pełne wyniki

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!

...