使用oop连接的简单问题数据库

时间:2012-05-02 16:19:51

标签: php mysql oop

这是dbconnect.class.php:

<?php  

class Connect 
{ 
    public $error; 
    protected $db; 
    public function __construct() 
    { 
        $link = mysql_connect("localhost","root","1") or $this->error = mysql_error(); 
        $db = mysql_select_db("tarih",$link); 
        $this->db = $db; 
    } 
} 
?>

这是主要的php文件:

<?php
//header.class.php 
require_once 'dbconnect.class.php'; 

class Header extends Connect 
{ 
    public $headers = array(); 
    private $baglan; 
    public function __construct() 
    { 
        /* 
        * Bu sınıf sayfaların header bilgilerini işler. 
        */ 
        $baglan = $this->db; 
    } 

    public function sayfaHeader($sayfa = true) 
    { 
        $sql = "SELECT * FROM header WHERE id='" . $sayfa . "'"; 
        $query = mysql_query($sql,$this->baglan); 
    } 


} 

Header::sayfaHeader(); 
?>

当我运行主php文件时,我看到了这个错误:

Fatal error: Using $this when not in object context in C:\AppServ\www\ilk\class\header.class.php on line 19  

第19行:

$query = mysql_query($sql,$this->baglan);  

问题出在哪里?我不能看到问题,因为我不会写这么久的PHP代码。

4 个答案:

答案 0 :(得分:3)

Header::sayfaHeader(); 

它调用没有对象创建的方法。你必须这样做

Header obj = new Header();
obj->sayfaHeader();

如果要调用类的方法,则将方法声明为static。但是你不能使用$this引用,因为静态方法和成员没有引用类对象。

更新:
mysql_select_db返回bool值。您必须使用$link变量进行查询。

答案 1 :(得分:1)

您没有数据库问题,

你的代码错了。

Header::sayfaHeader(); 

这适用于静态方法。但是你需要一个实例来实际调用该方法。

尝试:

Header obj = new Header();
obj->sayfaHeader();

答案 2 :(得分:-1)

我认为您需要构造父实例化数据库类

public function __construct() 
{ 
    parent::__construct();
    $baglan = $this->db; 
} 

答案 3 :(得分:-1)

public function __construct() 
{ 
    // if you do this, add a $this-> to baglan to acces it in the class
    $this->baglan = $this->db; 
} 

public function sayfaHeader($sayfa = true) 
{ 
    $sql = "SELECT * FROM header WHERE id='" . $sayfa . "'"; 

    // or, since you inherit the $this->db
    $query = mysql_query($sql,$this->db); 
}