如何将mysqli类扩展到其他类方法中

时间:2012-09-19 09:09:27

标签: php mysqli

对不起这个愚蠢的问题,我很抱歉。我在php中阅读了很多关于oop的内容,所以我决定尝试一下。我有一个运行程序性PHP的博客,一切正常,但我有mysql而不是代码上的mysqli,我决定升级到新的mysqli。这里的问题实际上是查询数据库以获得结果。我已经解决了这个问题两天了。这是我想要实现的代码示例。

class myDB extends mysqli
{
  //perform mysqli connection to host here and return  $connection_handle
}

class siteConfig
{
   private function getConfig($id)
  {
   $res = $connection_handle->query("SELECT * from config where id='1'");
   $row = $res->fetch_assoc();
   return $row['option'];
  }

}

在主索引文件上我会这样做

$c = new siteConfig();
echo $c->getConfig(1);
//and this will return the result of the query.

请原谅我的编程逻辑,对于oop世界来说仍然是一个非常可怕的新手

任何想法都会有所帮助,谢谢。

PS

这是使用

的代码的工作示例
$db_link = mysqli_connect(DB,HOST,DB_USER,DB,PASS,DB_NAME) or die(mysql_error());

class myDB extends mysqli
{
  public function getConfig($id, $db_link) // thanks cbuckley
{
 $db_link = $this->db_link;
     $res = mysqli_query($this->db_link,"SELECT * from config where id='1'");
     $row = mysqli_fetch_array($res);
     return $row['option'];
}    
}

我已经定义了常量并且连接成功但是select不起作用。在索引页面上,这是[code] include('inc / dbc.php');

 $db = new MyDB();
 echo $db->getConfig(1, $db_link);  

请告诉我丢失的地方,或者如有可能,请在必要时为我重构代码

2 个答案:

答案 0 :(得分:2)

为什么不扩展mysqli类并将你的函数添加到myDB?

class myDB extends mysqli
{
   public function getConfig($id) // thanks cbuckley
  {
   $res = $this->query("SELECT * from config where id='1'");
   $row = $res->fetch_assoc();
   return $row['option'];
  }    
}

$db = new myDB;
$db->getConfig($id);

你可以使用$ this关键字调用myDb中的任何mysqli函数(它引用自身,因为“它自我”扩展了mysqli,它将拥有mysqli所有的函数+你添加的函数)

答案 1 :(得分:2)

保持数据库连接与任何业务逻辑之间的分离是件好事,所以你的例子很好。还有一些额外的东西需要整理,即应用程序逻辑如何访问数据库处理程序。这是一个例子:

class MyDB extends mysqli {
    // any custom DB stuff here
}

class SiteConfig {
    protected $db;

    public function __construct(MyDB $db) {
        $this->db = $db;
    }

    public function getConfig($id) {
        $statement = $this->db->prepare('SELECT * FROM config WHERE id = ?');
        $statement->bind_param('i', $id);

        if ($statement->execute()) {
            $row = $statement->get_result()->fetch_assoc();
            return $row['option'];
        }
    }
}

$db = new MyDB('host', 'user', 'password', 'db');
$config = new SiteConfig($db);
var_dump($config->getConfig(1));

这里有几点感兴趣: