Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Call to a member function prepare() on a non-object
troian
post
Post #1





Grupa: Zarejestrowani
Postów: 184
Pomógł: 2
Dołączył: 3.02.2013

Ostrzeżenie: (0%)
-----


Tak jak w tytule tematu, skrypt zwraca mi błąd:

Kod
Fatal error: Call to a member function prepare() on a non-object in include.db.php on line 33


  1. class db
  2. {
  3. protected static $host;
  4. protected static $port;
  5. protected static $user;
  6. protected static $pass;
  7. private static $pdo;
  8.  
  9. public function __construct()
  10. {
  11. self::$host = HOST;
  12. self::$port = PORT;
  13. self::$user = USER;
  14. self::$pass = PASS;
  15. $options = array(
  16. PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'
  17. );
  18. try
  19. {
  20. self::$pdo = new PDO("mysql:host={self::$host};port={self::$port}", self::$user, self::$pass, $options);
  21. self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  22. }
  23. catch(PDOException $error)
  24. {
  25. die("ERROR CONNECT: " . $error->getMessage());
  26. }
  27. }
  28.  
  29. public static function query($query='',$value=array(),$type="true")
  30. {
  31. try
  32. {
  33. $query = self::$pdo->prepare($query);
  34. switch($type)
  35. {
  36. case 'true':
  37. case 'false':
  38. $tab = array('true' => array(0 =>'true',1=>'false'),'false' => array(0 =>'false',1=>'true'));
  39. $result = $query->execute($value) ? $tab[$type][0] : $tab[$type][1];
  40. break;
  41. default:
  42. $result = $query->execute($value) ? $query->$type() : false;
  43. }
  44. }
  45. catch(PDOException $error)
  46. {
  47. die("ERROR QUERY: " . $error->getMessage());
  48. }
  49.  
  50. return $result;
  51. }
  52. }
  53.  


dokładnie chodzi o tą oto linijkę
Kod
$query = self::$pdo->prepare($query);
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
LowiczakPL
post
Post #2





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


No więc na szybko (IMG:style_emoticons/default/wink.gif)


metoda query jest statyczna a w niej

self::$pdo po prostu nie istnieje bo KONSTRUKTOR nie jest wykonany (IMG:style_emoticons/default/exclamation.gif) !

Jeśli chcesz robić statyczną klasę do obsługi bazy to nie w konstruktorze jest łączenie z bazą a w statycznej metodzie

np statyczna klasa implementująca PDO

  1. use PDO;
  2.  
  3. class Database extends PDO
  4. {
  5. public static function get($confi = false)
  6. {
  7. $confi = !$confi ? array (
  8. 'type' => DB_TYPE,
  9. 'host' => DB_HOST,
  10. 'name' => DB_NAME,
  11. 'user' => DB_USER,
  12. 'pass' => DB_PASS
  13. ) : $group;
  14.  
  15. $type = $confi['type'];
  16. $host = $confi['host'];
  17. $name = $confi['name'];
  18. $user = $confi['user'];
  19. $pass = $confi['pass'];
  20.  
  21. $id = "$type.$host.$name.$user.$pass";
  22. if (isset(self::$instances[$id])) {
  23. return self::$instances[$id];
  24. }
  25.  
  26. try {
  27. $instance = new Database("$type:host=$host;dbname=$name;charset=utf8", $user, $pass);
  28. $instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  29. self::$instances[$id] = $instance;
  30. return $instance;
  31. } catch (PDOException $e) {
  32. Logger::newMessage($e);
  33. Logger::customErrorMsg();
  34. }
  35. }



i wywołujesz to sobie w dowolnym modelu

  1. class Model {
  2. protected $_db;
  3.  
  4. public function __construct(){
  5. $this->_db = Database::get(); // to jest Twoje połączenie z bazą za pomocą PDO
  6. }
  7.  
  8. public function insert($table, $array){
  9. return $this->_db->insert($table,$array);
  10. }
  11.  
  12. ....


Ten post edytował LowiczakPL 23.06.2016, 22:15:22
Go to the top of the page
+Quote Post

Posty w temacie
- troian   [PHP] Call to a member function prepare() on a non-object   23.06.2016, 12:27:49
- - nospor   Sie zdecyduj. Albo uzywasz STATIC albo normalnie o...   23.06.2016, 13:40:23
- - troian   Cytat(nospor @ 23.06.2016, 14:40:23 )...   23.06.2016, 14:01:40
- - nospor   Nie, nie jest dobrze napisane.... Po grzyba w que...   23.06.2016, 14:14:17
- - troian   to w jaki sposób wywołać obiekt pdo ? $this-...   23.06.2016, 14:21:06
- - nospor   Pokaz jak odpalasz funckje query(). I ogolnie poka...   23.06.2016, 14:37:36
- - LowiczakPL   No więc na szybko metoda query jest statyczna a...   23.06.2016, 22:12:59
- - troian   Wykonałem to w taki sposób, Czy jest to prawidło...   24.06.2016, 14:10:31
- - nospor   Cos ty sie uparl na tworzenie tych obiektow? W ko...   24.06.2016, 14:41:18
- - troian   Cytat(nospor @ 24.06.2016, 15:26:58 )...   24.06.2016, 14:43:02
- - nospor   Wszystko dlatego ze query odpalassz statycznie: db...   24.06.2016, 14:46:55
- - troian   No ale jeżeli 10-15 plików będzie się tak generowa...   24.06.2016, 16:21:18
- - nospor   Obiekt db tworzy sie tylko i wylacznie RAZ. Raz ut...   24.06.2016, 16:29:44
- - troian   Cytat(nospor @ 24.06.2016, 17:29:44 )...   24.06.2016, 16:51:40
- - viking   To zależy. Jest możliwość wykonania "lazy loa...   24.06.2016, 19:20:22
- - troian   To w jaki sposób działa to w joomli ? bo ja własni...   25.06.2016, 09:17:27
- - Pyton_000   Zmień obiekt zainteresowania (czy. Jomla)   25.06.2016, 09:18:34
- - troian   Cytat(Pyton_000 @ 25.06.2016, 10:18:3...   25.06.2016, 10:01:29
- - viking   Podałem ci już link. Zobacz inne komponenty typu z...   25.06.2016, 10:19:04
- - troian   Cytat(viking @ 25.06.2016, 11:19:04 )...   25.06.2016, 12:06:08
- - com   LowiczakPL a Ty jak chcesz pomagać, to czytaj uważ...   28.06.2016, 13:20:51


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 02:09