仔细阅读了这个问题,并认识到这个问题可能是范围问题。
但是,不管我发现了什么,我仍然无法让它发挥作用。。。(此外,作为这方面的新手,还不完全了解"范围"到底是什么)
到目前为止我得到的。。
<?php
class Database
{
var $onError = 0;
var $longQuery = 0;
var $errorFrom = 'email@domain.com';
var $db;
var $dbname;
var $host;
var $password;
var $queries;
var $result;
var $user;
var $id;
var $id_name;
var $table_name;
var $columns = array();
function Database($host, $user, $password, $dbname)
{
$this->host = $host;
$this->user = $user;
$this->password = $password;
$this->dbname = $dbname;
}
function connect($redirect = false)
{
$this->queries = array();
$this->db = mysqli_connect($this->host, $this->user, $this->password,$this->dbname) or $this->notify(mysqli_error(), false, true);
}
function query($sql)
{
//Set multiple queries
$this->queries[] = $sql;
//echo $sql;exit;
$varStart = microtime();
$this->result = mysqli_query($sql) or $this->notify(mysqli_error($this->result));
$varStop = microtime();
$varQueryExecutionTime = $varStop - $varStart;
if(($longQuery != 0) && ($varQueryExecutionTime > $longQuery))
{
$msg = $_SERVER['PHP_SELF'] . " @ " . date("Y-m-d H:ia") . "'n'n";
$msg .= 'The following query took $varQueryExecutionTime to complete:'n'n';
$msg .= $this->lastQuery() . "'n'n";
$msg .= $this->queries() . "'n'n";
@mail($this->errorTo, "Long Query " . $_SERVER['PHP_SELF'], $msg, "From: {$this->errorFrom}");
}
return $this->result;
}
//Rest of the other functions
}
我认为MySQLi查询应该是
$this->result = mysqli_query($CONNECTION_HERE, $sql) or $this->notify(mysqli_error($this->result));
我试过
$this->result = mysqli_query($this->db, $sql) or $this->notify(mysqli_error($this->result));
和
$this->result = mysqli_query($db, $sql) or $this->notify(mysqli_error($this->result));
但仍然得到
警告:mysqli_query()需要至少2个参数,其中1个在/home/…中给定/第103行上的classes/class_database_dbl.php
警告:mysqli_error()要求参数1为mysqli,在/home/…中给定null/第103行上的classes/class_database_dbl.php
config.php具有
//Open a connection to Database
$objDatabase = new Database($arrConfig['dbHost'], $arrConfig['dbUser'], $arrConfig['dbPass'], $arrConfig['dbName']);
$objDatabase->connect();
在里面…
我已经尽力了,但遗憾地失败了。。。。
干杯
例如,您有数据库类
<?php
class DB_class{
protected $server = "localhost";
protected $dbuser = "root";
protected $dbpw = "";
protected $db = "db";
protected $con;
function __construct() {
$this->con = new mysqli($this->server,$this->dbuser,$this->dbpw, $this->db);
$this->con->set_charset("utf8");
}
}
?>
然后,这个类扩展到另一个需要从数据库获取数据的类中。
function getCategory(){
DB_class::__construct();
$sql = "SELECT * FROM category";
$rs=$this->con->query($sql);
while($row = $rs->fetch_assoc()){
array_push($this->arrCategory, array('ID'=>$row['ID'], 'CategoryName'=>$row['category_name']));
}
}
在我的例子中,所有结果都是我在数组中推送的,但您可以简单地显示这些数据。
我试过你的代码,它几乎没问题。
我注意到一些问题:
1)
mysqli_query($this->db, $sql)
而不是
mysqli_query($sql)
2)
if(($this->longQuery != 0) && ($varQueryExecutionTime > $this->longQuery))
而不是
if(($longQuery != 0) && ($varQueryExecutionTime > $longQuery))
除此之外,你的代码很好,而且很有效。
我也尝试了错误的数据库凭据,我得到了与您相同的错误。因此,检查$arrConfig
,它可能是空的或错误的。
只需使用var_dump($arrConfig);die();
即可查看。
感谢您的帮助。
然而,还没有修复,所以当我有机会的时候,我会从头开始重写。
干杯