Php 在其他类中使用MySQLi
我希望有人能帮我解决我的小问题,但我无法解决。我想要实现的是在每次调用数据库时都有一个连接到该数据库的database.php文件。然后我想能够抓取结果,在其他文件中插入结果等,但不必单独连接到这些文件中的数据库行 我现在拥有的是我的数据库连接类:Php 在其他类中使用MySQLi,php,mysqli,Php,Mysqli,我希望有人能帮我解决我的小问题,但我无法解决。我想要实现的是在每次调用数据库时都有一个连接到该数据库的database.php文件。然后我想能够抓取结果,在其他文件中插入结果等,但不必单独连接到这些文件中的数据库行 我现在拥有的是我的数据库连接类: <?php $db_host = 'localhost'; $db_user = 'dbusername'; $db_pass = 'dbpassword'; $db_name = 'dbname';
<?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";
}
}
}
?>
我希望能够使用其他类中的一些函数执行一些数据库操作,例如:
require_once("whatever.class.php");
$test = new myclass();
$update = $test->updataDatabase();
在我的“whatever.class.php”文件中,我有以下函数:
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()
基本上我的问题是,我希望能够在另一个类中使用“$this->mysqli”,而不必在该类中再次设置数据库连接。我只想包含database.class.php文件,然后连接并使用$this->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;
}
我还尝试过从数据库扩展“myclass”,但没有成功,我尝试使用“::parent”,也没有成功。非常感谢您的帮助,因为我已经为此奋斗了几天。我想您至少有3种方法可以做到这一点。。。(也许还有更多的方法) 下面的步骤首先需要包括databasede.php(带类) 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.";
}
}
}
如果使用第一个,请尝试使用此
parent::\uu construct()代码>在myclass构造函数中,它终于开始工作了。我在database.php中更改了一些内容,在另一个类中,我使用了公共函数_-construct(){parent::_-construct();}并扩展了该类。我不确定我以前做错了什么,但我没法让它发挥作用。。非常感谢你的回复,这对我很有帮助:)我确实做到了:)所以我的问题结束了,因为“这个问题已经有答案了”。这个问题和答案是三年前的。我的问题是6年前的。古怪的
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.";
}
}
}