2014-04-19 3 views
0

임 간단한 데이터베이스 클래스를 확장하려고합니다.Database :: __ construct()에 대한 인수 1이 누락되었습니다.

<?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'); 

?> 

왜이

Warning: Missing argument 1 for Database::__construct(), called in /Applications/MAMP/htdocs/admin/extend.php on line 14 and defined in /Applications/MAMP/htdocs/Admin/lib/class.database.php on line 7

Notice: Undefined variable: db in /Applications/MAMP/htdocs/Admin/lib/class.database.php on line 9

입니다 : 이유 나는이 오류가? EXTENDING없이 데이터베이스에 연결하면 모든 것이 잘 작동합니다.

+1

테이블과 열을 바인드 할 수 없습니다. 기간. –

답변

1

나는 지금 무슨 일이 벌어지고 있는지 봅니다.

데이터베이스 생성자가 포함 된 AdminAccount에서 데이터베이스를 확장하려고합니다. 따라서 AdminAccount를 인스턴스화 할 때 $ db를 포함해야하거나 AdminAccount에 새로운 __construct()를 작성해야합니다.

코드를 살펴 보니 데이터베이스 확장 시점이 보이지 않습니다. 당신은 AdminAccount 또는 AdminAccount에서 데이터베이스를 인스턴스화 $ 데이터베이스를 통과해야하지만, 당신이 정말로 데이터베이스를 확장해야하는 경우 다음의 해결책은 다음과 같습니다 코드의 마지막 부분에서

$adminaccount = new AdminAccount($db); 
+0

죄송합니다, 제 코드는 분명하지 않습니다. args를 전달하고 있습니다. 변수 db가 'includes/connect.php'안에 있습니다. – user3527939

+0

그러나 확장하지 않고 해당 특정 클래스의 데이터베이스를 쿼리하면 어떻게 작동합니까? – user3527939

+0

@ user3527939 무슨 일이 일어 났는지 본 후에 대답을 업데이트했습니다. – Devon

0

$db이 정의되지 않습니다. 설정되지 않았습니다. Database 클래스의 생성자는 값을 기대합니다.

+0

이것은 기본적으로 이전에 쓴 것인데 문제는 아닙니다. AdminAccount가 데이터베이스를 확장하고 있기 때문에 Database 생성자가 AdminAccount의 생성자이기도합니다. 내 대답을 보라. – Devon

관련 문제