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);
请告诉我丢失的地方,或者如有可能,请在必要时为我重构代码
答案 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));
这里有几点感兴趣:
$db
传递到您的配置类$config->db
是
声明受保护,因此无法在类$db
实例设置为SiteConfig类的属性,以便可以在getConfig()
中使用$config->db
是
声明受保护,因此无法在类