2014-02-03 3 views
1

может быть, это возможно дубликат, я имею поиск здесь некоторые вопросы, как это, но я попробовал все ответы, но я до сих пор получил эту ошибкукласс не определено свойство в PHP

Notice: Undefined property: User::$_pdo in D:\xampp\htdocs\pengun\classes\DB.php on line 32 

и эту ошибку

Fatal error: Call to a member function prepare() on a non-object in D:\xampp\htdocs\pengun\classes\DB.php on line 32 

это мой DB класс

<?php 
class DB { 

    private $_pdo, $_query, $_result, $_count, $_row; 

    public function __construct($host, $dbname, $user, $password) { 
     $this->host = $host; 
     $this->user = $user; 
     $this->password = $password; 
     $this->dbname = $dbname; 

     try { 
      $_pdo = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->dbname, $this->user, $this->password); 
     } catch (PDOException $e) { 
      die($e->getMessage()); 
     } 

     $_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 

    public function select($fields, $table, $where = array()) { 
     if(count($where) === 3) { 
      $operators = array('=','>','<','>=','<='); 

      $column  = $where[0]; 
      $operator = $where[1]; 
      $value  = $where[2]; 

      if(in_array($operator, $operators)) { 
       $sql = "SELECT {$fields} FROM {$table} WHERE {$column} {$operator} {$value}"; 
       if($this->_query = $this->_pdo->prepare($sql)) { 
        $this->_query->execute(); 
        $this->_row = $this->_query->fetch(); 

        print_r($this->_row); 
       } 
      } 
     } 
    } 
} 

может кто-то пожалуйста, скажите мне, что это проблема с моим кодом? заранее спасибо.

ответ

1

Поскольку в конструкторе вы назначаете new PDO только локальной переменной, доступной только внутри конструктора. Вы должны использовать:

$this->_pdo = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->dbname, $this->user, $this->password); 
... 
$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
+0

я пробовал, но все же я получил эту ошибку – Pengun

+0

У вас есть точно такое же сообщение об ошибке, как перед вашим редактировать? –

+0

yes sir, я не знаю почему – Pengun

0

Вы назначены PDO объект локальной переменной в конструкторе. Вы должны установить переменную класса!

Изменить

$_pdo 

в

$this->_pdo 

в строках 13 и 18.

+0

Да, я уже его изменил, но все же ошибка – Pengun

+0

Пожалуйста, напишите вашу ошибку здесь. Это должно хорошо работать. – Mohammad

+0

Я уже разместил его, посмотрю на мой вопрос, который является ошибкой – Pengun