我正在尝试创建一个类,当调用它时,会创建一个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
)