1

嘿对不起这个愚蠢的问题。我在 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 世界的一个非常糟糕的新手

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

附言

这是正在使用的代码的工作示例

$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'];
}    
}

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

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

请让我知道在哪里遗漏了它,或者如果可能的话,在必要时为我重构代码

4

2 回答 2

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

这里有几个有趣的地方:

于 2012-09-19T10:17:16.083 回答
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 函数(它引用自身,并且由于“it self”扩展了 mysqli,它将具有 mysqli 具有的所有函数 + 您添加的函数)

于 2012-09-19T09:13:51.077 回答