OO数据库类

时间:2010-06-25 05:16:18

标签: php oop class

我试图通过在PHP中创建数据库类来更加清晰地学习面向对象的编程。

这就是我现在所拥有的。当我尝试使用$ db-> query();

调用它时,我收到一个关于$ mysqli是一个未定义变量的错误

请解释如何定义变量$ mysqli。

<?php

class phpDatabaseClass {

 public function __construct()
 {
  $mysqli = new mysqli(DBhost, DBusername, DBpassword, DBname);
 }

 public function query()
 {
  $sql = 'select * from users';
  $results = $mysqli->query($sql);

  if(($results->num_rows) > 0) 
  {
   echo 'We have: '.$results->num_rows;
  }
 }

}

?>

在另一个文件中,我实例化对象,然后调用这样的函数:

 require 'phpDatabaseClass.php';
 define('DBhost', 'localhost');
 define('DBusername', 'root');
 define('DBpassword', 'root');
 define('DBname', 'campbellCustomCoatings');


 $db = new phpDatabaseClass();
 $db->query();

2 个答案:

答案 0 :(得分:2)

我能看到的问题是试图在同一个对象内的函数调用之间保持$mysqli

需要做的是将变量存储为实例变量,由$this->[VARIABLE]限定:

<?php

class phpDatabaseClass {

 public function __construct()
 {
  $this->mysqli = new mysqli(DBhost, DBusername, DBpassword, DBname);
 }


 public function query()
 {
  $sql = 'select * from users';
  $results = $this->mysqli->query($sql);

  if(($results->num_rows) > 0) 
  {
   echo 'We have: '.$results->num_rows;
  }
 }

}

?>

我会考虑使用PDO

答案 1 :(得分:2)

mysqli的实例需要成为您班级的成员,请点击此处...

class phpDatabaseClass {
 private $mysqli;
 public function __construct()
 {
  $this->mysqli = new mysqli(DBhost, DBusername, DBpassword, DBname);
 }

 public function query()
 {
  $sql = 'select * from users';
  $results = $this->mysqli->query($sql);

  if(($results->num_rows) > 0) 
  {
   echo 'We have: '.$results->num_rows;
  }
 }

}

另外,因为您正在学习,请尝试扩展PDO类以了解继承。

此外,略有切向,但通常常量以ALL_CAPS_WITH_UNDERSCORE_SEPARATORS命名。

此外,全局定义中的数据库内容可能存在风险,因为每个PHP都可以访问它。我知道WordPress会这样做,但请相信我的代码质量值得怀疑。然而,它的受欢迎程度无疑是巨大的。