将PHP功能从MySQL转换为MySQLi
已经将此问题阅读为死亡并认识到此问题可能是范围问题。将PHP功能从MySQL转换为MySQLi
但是,无论怎样,我发现,我仍然不能使它工作...(加上处于这样的新手,没有完全理解什么是“范围”真的是)
我”什么已经走到这一步..
<?php
class Database
{
var $onError = 0;
var $longQuery = 0;
var $errorFrom = '[email protected]';
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/..../classes/class_database_dbl.php给出关于线103
警告:mysqli_error()预计参数1是mysqli的,在/home/..../classes/class_database_dbl.php空给定上线103
的config.php中具有
//Open a connection to Database
$objDatabase = new Database($arrConfig['dbHost'], $arrConfig['dbUser'], $arrConfig['dbPass'], $arrConfig['dbName']);
$objDatabase->connect();
它
...
做了我最好的,但惨败....
干杯
感谢您的协助。
不过,所以在我有机会的时候会从头开始重写。
干杯
如果
对于excample你有DB类
<?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");
}
}
?>
然后你将这个类扩展到另一个需要从db获取数据的类。
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']));
}
}
在我的例子中所有的结果我推入阵列,但你可以这个数据简单的显示。
Thx Normis - 但意味着双重荷兰人给我。我试图用我的例子,但唉 - 我不够了解我需要做什么。这个类文件处理整个网站的多个页面,所以我不能使用像$ sql =“SELECT * FROM category”的调用;有50多个页面调用这个类文件,所有的不同的sql语句... – Gazza
我试过了你的代码,它几乎没问题。
我注意到一些问题:
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();
来检查它。
支票'$ arrConfig'返回相关值......可能是完成后续代码var_dump($ arrConfig)的其中之一是截止范围.. –
;模具();直接打开 db是NULL? – Gazza