从自定义类获取mysqli对象

时间:2014-05-15 06:52:41

标签: php class mysqli statistics

我正在尝试创建一个类,当调用它时,会创建一个mysqli对象并将其作为类的结果返回。

更长的解释:我试图以某种方式让每个mysqli通过一个类来进行统计。每个mysqli查询的统计信息都将转到全局变量,我可以在页面末尾打印它以用于开发目的。

所以,如果我做这样的事情:

$m = new sql;
$user = "a";
if ($n = $m->prepare("SELECT id FROM users WHERE username=?")) {
    $n -> bind_param("s", $user);
    pre($n);
    $n -> execute();
    $n -> bind_result($id);

    while($n -> fetch()){
        print_r($id);
    }
    $n -> close();
}
$m -> close();

全局变量(例如$ GLOBALS ['mysqli'])将包含查询所花费的时间和准备好的查询。像这样:

$GLOBALS['mysqli'][1]['query'] = "SELECT id FROM users WHERE username=?";
$GLOBALS['mysqli'][1]['time'] = 20; //ms

问题: 甚至当我为sql类创建一个名为prepare($ query)的函数并返回带有调用的预处理语句的对象时,下一个函数bind_param返回错误“调用未定义的方法sql :: prepare()”。我假设它为sql类调用该函数。

好吧,我不能更好地解释它,但也许我可以表明:

    class sql {
    /*
        $r = new sql;
        $GLOBALS['info']['mysqli'];
    */

    public
        $object,
        $query,

        $start,
        $end,
        $time,

        $stat,
        $error;


    public function __construct()  {
        $this->start = microtime(true);
        $this->error = null; 

        $this->object = new_m(); 

    } 
    public function __destruct()  {  
        $this->end = microtime(true);
        $this->stat['time'] = $this->end-$this->start;
        $GLOBALS['info']['mysqli'][] = $this->stat;

    } 

    public function prepare($q) {
        $this->stat['query'] = $q;
        $this->object->prepare($q);
        return $this->object;
    } 

}
function new_m() {
    $cserver = substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100);

    $local_server = s('mysqli_local_server');
    $local_user = s('mysqli_local_user');
    $local_pass = s('mysqli_local_pass');
    $local_db = s('mysqli_local_db');

    $server = s('mysqli_server');
    $user = s('mysqli_user');
    $pass = s('mysqli_pass');
    $db = s('mysqli_db');

    if ($cserver == $local_server) {
        return new mysqli('127.0.0.1',$local_user,$local_pass,$local_db); 
    }
    else {
        return new mysqli($server,$user,$pass,$db);
    }
}

我知道这个例子有一些逻辑错误,但我认为它显示了我想要做的事情。

var_dump($ this-> object)就在返回之前:

mysqli Object

(     [affected_rows] => -1     [client_info] => mysqlnd 5.0.10 - 20111026 - $ Id:b0b3b15c693b7f6aeb3aa66b646fee339f175e39 $     [client_version] => 50010     [connect_errno] => 0     [connect_error] =>     [errno] => 0     [错误] =>     [error_list] =>排列         (         )

[field_count] => 1
[host_info] => 127.0.0.1 via TCP/IP
[info] => 
[insert_id] => 0
[server_info] => 5.5.27
[server_version] => 50527
[stat] => Uptime: 17706  Threads: 1  Questions: 329  Slow queries: 0  Opens: 55  Flush tables: 1  Open tables: 1  Queries per second avg: 0.018
[sqlstate] => 00000
[protocol_version] => 10
[thread_id] => 67
[warning_count] => 0

0 个答案:

没有答案