我试图扩展一个简单的数据库类。
<?php
class Database {
public $db;
public function __construct($db)
{
$this->db = $db;
}
public function insert($table, $row, $value)
{
$query = $this->db->prepare('INSERT INTO ? (?) VALUES (?)');
$query->bindValue(1, $table);
$query->bindValue(2, $row);
$query->bindValue(3, $value);
$query->execute();
}
}
?>
这是我扩展上一课的主要课程:
<?php
class AdminAccount extends Database {
public function setValues($table, $row, $value)
{
$this->insert($table, $row, $value);
}
}
?>
这就是$ db变量......
$hostname = 'localhost';
$database = 'mydb';
$username = 'root';
$password = 'root';
$db = new PDO("mysql:host=" . $hostname . ";dbname=" . $database, $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
然后我包括,实例化等..
<?php
require_once('includes/settings.php');
require_once('includes/connect.php');
require_once('lib/class.database.php');
require_once('lib/class.adminaccount.php');
$database = new Database($db);
$adminaccount = new AdminAccount();
$adminaccount->setValues('tasklist', 'creator', 'Zet');
?>
出于某种原因,我收到了这个错误:
警告:缺少参数1,用于调用Database :: __ construct() /Applications/MAMP/htdocs/admin/extend.php在第14行并在中定义 第7行/Applications/MAMP/htdocs/Admin/lib/class.database.php
注意:未定义的变量:db in 第9行/Applications/MAMP/htdocs/Admin/lib/class.database.php
这是为什么?当我连接到没有扩展的数据库时,一切正常。
答案 0 :(得分:1)
我知道现在发生了什么。
您正在AdminAccount中扩展数据库,其中包含数据库构造函数。因此,在实例化AdminAccount时需要包含$ db,或者需要在AdminAccount中编写新的__construct()。
仅仅从查看代码开始,我就没有看到您扩展数据库的重点。您应该只将$ database传递给AdminAccount或在AdminAccount中实例化数据库,但如果您确实需要扩展数据库,那么解决方案将是:
$adminaccount = new AdminAccount($db);
答案 1 :(得分:0)
$db
未定义。它还没有设定好。 Database类的构造函数需要一个值。