Estaba siguiendo un video y comprobando dos veces todo el código y todo parece ser el mismo, pero recibo estos errores.
Errores :
Aviso: variable indefinida: pdo en QueryBuilder.php en la línea 14
Error fatal: llamada a una función miembro prepare () en nulo en QueryBuilder.php en la línea 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 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());
Como se indica en los comentarios, en OOP, necesita usar $this->pdo
pasando la propiedad del objeto para él, en lugar de la variable $query = $pdo->
ya que lo ha construido en:
public function __construct($pdo) { $this->pdo = $pdo; ^^^^^^^^^^ }
Es decir:
$query = $this->pdo->prepare