将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(); 

...

做了我最好的,但惨败....

干杯

+0

支票'$ arrConfig'返回相关值......可能是完成后续代码var_dump($ arrConfig)的其中之一是截止范围.. –

+0

;模具();直接打开 db是NULL? – Gazza

感谢您的协助。

不过,所以在我有机会的时候会从头开始重写。

干杯

如果

对于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'])); 
    } 
} 

在我的例子中所有的结果我推入阵列,但你可以这个数据简单的显示。

+0

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();来检查它。

+0

Thx华金 - 根据您的建议改变。完成var_dump($ arrConfig); die();直接打开 db是NULL? – Gazza

+0

已经花费了更多的时间尝试纠正错误..归结为在班级内部未被识别的变量。我做了一个var_dump($ arrConfig); die();直接打开 Gazza

+0

你在哪里使用'$ arrConfig'?在一个方法里面?如果不是,那么在执行'new Database()'之前var_dump'$ arrConfig'会发生什么? –