将PHP FUNCTION从MySQL转换为MySQLi


Converting PHP FUNCTION from MySQL to MySQLi

仔细阅读了这个问题,并认识到这个问题可能是范围问题。

但是,不管我发现了什么,我仍然无法让它发挥作用。。。(此外,作为这方面的新手,还不完全了解"范围"到底是什么)

到目前为止我得到的。。

<?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();即可查看。

感谢您的帮助。

然而,还没有修复,所以当我有机会的时候,我会从头开始重写。

干杯