2016-12-26 132 views
2

我正在关注视频并仔细检查所有代码,并且所有代码看起来都一样,但我得到这些错误。未定义的变量:pdo,调用成员函数prepare()null

错误

说明:未定义变量:在QueryBuilder.php PDO线14上

致命错误:调用一个成员函数上的空制备()中QueryBuilder.php上线14

QueryBuilder.php

class QueryBuilder 
{ 
    protected $pdo; 

    public function __construct($pdo) 
    { 
     $this->pdo = $pdo; 
    } 

    public function selectAll($table) 
    { 
     $query = $pdo->prepare("SELECT * FROM `$table`"); // --> LINE 14 <-- 
     $query->execute(); 
     return $query->fetchAll(); 
    } 
} 

Connection.php

class Connection 
{ 
    public static function make() 
    { 
     $servername = "localhost"; 
     $dbUsername = "root"; 
     $dbPassword = ""; 
     $dbName = "test"; 

     try { 
      $pdo = new PDO("mysql:host=$servername;dbname=$dbName", $dbUsername, $dbPassword); 
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
      return $pdo; 
     } 
     catch(PDOException $e){ 
      die($e->getMessage()); 
     } 
    } 
} 

的init.php

require "database/Connection.php"; 
require "database/QueryBuilder.php"; 
require "app/Product.php"; 

$query = new QueryBuilder(Connection::make()); 
+0

'$ table'需要被定义;这是一个变量。 –

+0

@ Fred-ii-我在index.php中执行它,例如 - '$ products = $ query-> selectAll(“products”);' – Rudolph

+0

尝试'$ query = $ this-> pdo-> prepare' –

回答

2

正如评论指出,在OOP中,你需要使用$this->pdo传递对象的属性吧,由于您已将其构建为:

而不是变量

即:

$query = $this->pdo->prepare 
相关问题