class db{
public $conn;
    private static $h = "localhost";
    private static $u = "root";
    private static $p = "123123";
    private static $d = "air";
function __construct(){
$this->conn=mysqli_connect(self::$h,self::$u,self::$p,self::$d);
$this->conn->query('SET NAMES UTF8');
//mysqli_query($this->conn,'SET NAMES UTF8');
}
    public function getOne($sql,$resultType=MYSQL_ASSOC){//只取一条
     $q=$this->conn->query($sql);
     $rt=$q->fetch_array($resultType);
     return $rt;
    }
}
//下面是一个继承类,就是上面的那个db我写好了后。有只要引用数据库(只取一条的,取多条我未写出)便来继承。这样写不好吗?谢谢
class airVia extends db{
public function doSql(){
$sql='select * from xls1 where id=1';//实际中的语句复杂,只是测试
$r=$this->getOne($sql);//db::getone($sql);不行
return $r; 
}
}//airVia
//使用此类
$wc=new airVia($v);echo $wc->doSql();
错误信息如下:
Fatal error: Call to a member function query() on a non-object in D:\xampp\htdocs\chaxun\class\db.class.php on line 67
请问:
我的思路对吗?谢谢
一、写一个DB类,来连接数据库,以库要操作数据库时,可以来继承;
二,上述语句为何报错,看样子是那个$this->conn换成静态变量也不行。

解决方案 »

  1.   

    $this->conn  没有 query 这个方法
      

  2.   

    有的,我这样用就可以了。我可使用其父亲类,如:$mm=new db();
    echo $mm->getOne('select * from xls1');
      

  3.   

    应该是conn对象没有生成成功,检查一下参数啥的,打印输出conn对象看看是啥
      

  4.   

    你需要 在构造方法里 调用 parent::__construct();不然 就用 parent::getone(); 而不要用 $this
      

  5.   

    Fatal error: Call to a member function query() on a non-object
    $this->conn=mysqli_connect(self::$h,self::$u,self::$p,self::$d);
    没有实例化成功但你的代码并没有问题,可以正常通过测试(当然是改了用户名、口令、库名和表名)
    错误可能产生于其他地方,都 on line 67 了,你才贴出多少?既然是封装,就应该把错误处理也封装进来。这样就不要到处去问为什么出错了
      

  6.   

    错误信息如下:
    Fatal error: Call to a member function query() on a non-object in D:\xampp\htdocs\chaxun\class\db.class.php on line 67把你这行代码贴出来看看先。
      

  7.   

    给子类airVia 添加一个构造函数
    public function __construct(){
    parent::__construct();
    }