conn = mysqli_connect($dbhost . ":" . $dbport, $dbuser, $dbpw);
!$this->conn && $this->halt("Connect to MySQL failed");
$serverinfo = mysqli_get_server_info($this->conn);
if ($serverinfo > '4.1' && $GLOBALS['charset']) {
mysqli_query($this->conn, "SET character_set_connection=" . $GLOBALS['charset'] . ",character_set_results=" . $GLOBALS['charset'] . ",character_set_client=binary");
}
if ($serverinfo > '5.0') {
mysqli_query($this->conn, "SET sql_mode=''");
}
if ($dbname && !@mysqli_select_db($this->conn, $dbname)) {
$this->halt('Cannot use database');
}
$this->conn->set_charset('UTF-8'); # 设置字符集
}
function select_db($dbname) {
if (!@mysqli_select_db($this->conn, $dbname)) {
$this->halt('Cannot use database');
}
}
function server_info() {
return mysqli_get_server_info($this->conn);
}
function insert_id() {
$arr = $this->fetch_array('SELECT LAST_INSERT_ID() as id');
return $arr["id"];
}
function get_value($SQL, $offset = 0, $field = 0) {
$rt = $this->fetch_result($SQL);
if (isset($rt[$offset][$field])) {
return $rt[$offset][$field];
}
return false;
}
/**
* 执行查询
* @param type $SQL
* @param type $method
* @param type $error
* @return mixed
*/
function query($SQL, $method = null, $error = true) {
$query = mysqli_query($this->conn, $SQL);
!$query && $error && $this->halt('Query Error: ' . $SQL);
return $query;
}
/**
* 执行数据库中的玩家存在查询 因为合区涉及数据库的查找是否存在玩家 不能抛出错误 故另写次函数 仅自己和userProc使用 zyt
* @param type $SQL
* @param type $method
* @param type $error
* @return mixed
*/
function userQuery($SQL, $method = null, $error = true) {
$query = mysqli_query($this->conn, $SQL);
// !$query && $error && $this->halt('Query Error: ' . $SQL);
if (!$query && $error && mysqli_error($this->conn) == "No database selected") {
return null;
}
return $query;
}
/**
* 执行更新的时候加上事物逻辑
* @param type $SQL
* @return int errno
*/
function safeQuery($SQL) {
mysqli_query($this->conn, 'start transaction');
mysqli_query($this->conn, 'SET autocommit=0');
// CLogUtil::err($SQL);
// CLogUtil::err(debug_backtrace());
$query = mysqli_query($this->conn, $SQL);
$err = mysqli_errno($this->conn);
if ($err && !$query) {
mysqli_query($this->conn, 'rollback');
} else {
mysqli_query($this->conn, 'commit');
}
mysqli_query($this->conn, 'SET autocommit=1');
return $err;
}
/**
* 将查询结果作为索引数组返回
* @param string $SQL
* @return array
*/
function fetch_row($SQL) {
return $this->fetch_result($SQL, MYSQLI_NUM);
}
/**
* 将查询结果作为关联数组返回
* @param string $SQL
* @return array
*/
function fetch_array($SQL) {
return $this->fetch_result($SQL, MYSQLI_ASSOC);
}
/**
* 从结果中取一行作为结果返回
* @param string $SQL
* @param int $result_type 1. 关联数组, 2. 索引数组, 3 both
* @return type
*/
function fetch_result($SQL, $result_type = MYSQLI_BOTH) {
$arr = array();
$query = $this->query($SQL);
while ($data = mysqli_fetch_array($query, $result_type)) {
$arr[] = $data;
}
$this->free_result();
return $arr;
}
function affected_rows() {
return mysqli_affected_rows($this->conn);
}
/**
* 调取结果集中行的数目
* @param type $SQL
* @return int
*/
function num_rows($SQL) {
$query = $this->query($SQL);
if (!is_bool($query)) {
return mysqli_num_rows($query);
}
return 0;
}
function num_fields($SQL) {
$query = $this->query($SQL);
return mysqli_num_fields($query);
}
function escape_string($str) {
return mysqli_escape_string($this->conn, $str);
}
function free_result() {
$void = func_get_args();
foreach ($void as $query) {
if (is_resource($query) && get_resource_type($query) === 'mysql result') {
mysqli_free_result($query);
}
}
unset($void);
}
function close() {
$this->free_result();
return @mysqli_close($this->conn);
}
function halt($msg = null) {
exit($msg . '
' . mysqli_error());
}
}