我希望有人可以帮我解决我的小问题,但我无法理解。我想要实现的是每次调用时都有一个连接到数据库的database.php文件。然后我希望能够在其他文件中获取结果,插入结果等,但无需在这些文件中单独连接到数据库行。
我现在拥有的是我的数据库连接类:
<?php
$db_host = 'localhost';
$db_user = 'dbusername';
$db_pass = 'dbpassword';
$db_name = 'dbname';
class database {
public $mysqli;
public function connect($db_host, $db_user, $db_pass, $db_name)
{
$this->mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
if ($this->mysqli->connect_errno)
{
return "An error occured while connecting to the database";
}
}
}
?>
现在,当我包含此文件并设置如此连接时:
$whatever = new database();
我希望能够在其他类中使用某些函数执行某些数据库操作,如下所示:
require_once("whatever.class.php");
$test = new myclass();
$update = $test->updataDatabase();
在我的&#34; whatever.class.php&#34;文件我有以下功能:
public function grabResult($table, $where, $field)
{
$result = 'SELECT * FROM '.$table.' WHERE '.$where.' = '.$field;
$query = $this->mysqli->query($result);
无论我尝试什么,我总会得到以下错误:
在第5行的/home/etc/public_html/whatever.class.php中调用非对象的成员函数query()
基本上我的问题是,我希望能够使用&#34; $ this-&gt; mysqli&#34;在另一个类中,无需在该类中再次设置数据库连接。我只想包含database.class.php文件,然后连接plus才能使用$ this-&gt; mysqli。
从另一页我发现:
$newConnection = new database;
$newConnection->connect($db_host, $db_user, $db_pass, $db_name);
$mysqli = $newConnection->mysqli;
但那并没有成功。与以下相同,不起作用:
$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);
public function __construct($mysqli)
{
$this->mysqli = $mysqli;
}
我也试过扩展&#34; myclass&#34;从数据库,没有运气,我尝试使用&#34; :: parent&#34;,也没有任何运气。非常感谢任何帮助,因为我几天来一直在努力解决这个问题。
答案 0 :(得分:1)
我认为你至少有3种方法可以做到这一点...... (也许还有更多方法)
1:第一个是将dbclass扩展到您的类,如
class myclass extends database {
public function myclass(){
parent::__construct();
//....
}
}
而不是myclass
2:第二种方式是
require_once(database.php);
class myclass {
private $db;
public function myclass(){ /* the constructor */
$this->db = new database();
}
public function grabResult($table, $where, $field)
{
$result = "SELECT * FROM {$table} WHERE {$where}={$field}";
return $db->mysqli->query($result);
}
}
3:第三种方式是
class myclass{
private $db;
public function myclass(){
$this->db = false;
}
public function setupDBHandler($dbHwNd){
$this->db = $dbHwNd;
}
public function grabResult($table, $where, $field)
{
if($this->db){
$result = "SELECT * FROM {$table} WHERE {$where}={$field}";
return $db->mysqli->query($result);
}
else{
return "Setup DBHandler first.";
}
}
}