Вызов области класса PDO для неопределенного метода - PullRequest
0 голосов
/ 16 марта 2012

Я пытаюсь создать простой класс, основанный на моем классе PDO базы данных, который я могу сказать «получить этот идентификатор», и он напечатает информацию.Я пытаюсь сделать это в "qu", но получаю следующую ошибку: "Вызов неопределенного метода qu :: get ()".

Вероятно, есть смесь проблем, поэтому любая помощь здесь будет потрясающей.Большое спасибо !!

class db {

   protected static $conn;
   private function __construct(){}

   public static function connect() {

      if (!isset(self::$conn)) {
           self::$conn = new PDO('mysql:host=localhost;dbname=database', DB_USER, DB_PASSWORD);
      }

      return self::$conn;
   }

}

    class qu {

    private $db;
    function quconn (&$db){
        $this->db = &$db;
    }

    private static function getq($id){

        $sql="SELECT * FROM table WHERE id=:id";
        $stmt = self::quconn()->prepare($sql);
        $stmt->execute(array(':id'=> $id));
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $result;

    }   

}

//$data = db::connect()->query("SELECT * FROM table")->fetchAll(); // this works

$data = qu::getq("22"); //can i use something like this? this causes the error
print_r($data);

1 Ответ

1 голос
/ 16 марта 2012

Функция getq класса qu должна быть помечена модификатором открытого доступа. В противном случае следующая строка не будет выполнена, поскольку getq является частной функцией

 $data = qu::getq("22");

Второй и выпуск в этом коде

 function quconn (&$db){
    $this->db = &$db;
}

Когда вы вводите функцию quconn из статического содержимого $, это недоступно.

Вместо этого используйте self :: $ db.

Для класса qu следует та же структура класса db, которая является классом одноэлементного множества.

Я также предлагаю выяснить разницу между $ this и self, статическим состязанием и т. Д.

Официальная документация Php предлагает многое о

Также я не думаю, что вам нужен метод передачи по ссылке: попробуйте переписать функцию quconn следующим образом:

 function quconn ($db){
   self::$db = $db;

}

Кстати, я не думаю, что класс qu хорошо "спроектирован" Даже если вы исправите проблему передачи по ссылке, эта инструкция не будет работать:

$stmt = self::quconn()->prepare($sql);

Вы вызываете функцию prepare для результата вызова quconn, который ничего не возвращает ...

Я предлагаю:

 $stmt = db::connect()->prepare($sql);

это получить экземпляр PDP и вызвать метод prapare ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...