1

嗨,我正在尝试在我的 PHP 脚本中从 MySQL 迁移到 MySQLi,我有这个系统类,它具有连接到我需要时调用的数据库的函数,使用如下简单方法:

Sys::database_connect();

该函数的实际代码是:

function database_connect(){
    require 'conf.php';//configuration file with database variables (sql_)
    mysql_connect($sql_serv, $sql_user, $sql_pw) OR die('ERRO!!! não ligou a base de dados');
    mysql_select_db($sql_bd);
}

调用该函数后,我可以毫无问题地查询数据库。

但是如果我把它放在 sys 类中,我不能对 mysqli 做同样的事情:

function database_connect(){
    require 'conf.php';

    $mysqli = new mysqli($sql_serv, $sql_user, $sql_pw, $sql_bd);
        if (mysqli_connect_errno()) {
        printf("Ligação à Base de dados falhou: %s\n", mysqli_connect_error());
        exit();
    }
}

当我调用 Sys::database_connect();

它连接到数据库,但我无法查询我是否习惯了我想要的简单方法,就像我对普通 MySQL 所做的那样,如果有人能解释我做错了什么或者为什么我不能那样做...

先感谢您; 费尔南多·安德拉德。

4

2 回答 2

3

您以后的查询必须使用连接到数据库时创建的 mysqli 连接标识符。所以把它保存到你的系统类的一个属性中,以后再使用它。

function database_connect(){
    require 'conf.php';

    $mysqli = new mysqli($sql_serv, $sql_user, $sql_pw, $sql_bd);
    if (mysqli_connect_errno()) {
        printf("Ligação à Base de dados falhou: %s\n", mysqli_connect_error());
        exit();
    }

    Sys::$dbConn = $mysqli;
}

然后稍后

function query( $sql ) {
    Sys::$dbConn->query( $sql );
    // error handling etc.
}
于 2012-12-20T15:02:06.513 回答
1

我为 mysqli 数据库类写了一个扩展

class database extends mysqli {
    function __construct() {
        parent::__construct('host', 'user', 'password', 'database');
        if(mysqli_connect_error()) {
            die('Connect error ('.mysqli_connect_errno().')'.mysqli_connect_error());
        }
        parent::query("SET NAMES 'utf8'");
}

function query($query) {
        $result = parent::query($query);
        if(!$result) {
            echo "<strong>MySQL error</strong>: ".$this->error."<br />QUERY: ".$query;
            die();
        }
        if(!is_object($result)) {
            $result = new mysqli_result($this);
        }
        return $result;
    }
}

所以连接数据库是 $db = new database() 执行查询是 $db->query(YOUR QUERY);

于 2012-12-20T15:03:49.900 回答