王刚 3 år sedan
förälder
incheckning
08a7d3220f
2 ändrade filer med 183 tillägg och 1 borttagningar
  1. 1 1
      Gameserver/Amfphp/process/UserProc.php
  2. 182 0
      Gameserver/Amfphp/util/CDbUtil.php

+ 1 - 1
Gameserver/Amfphp/process/UserProc.php

@@ -443,7 +443,7 @@ class UserProc {
      * @return boolean
      */
     static function checkRoleNameNotExist($roleName) {
-        return true;
+        return true;                                                            # 不再检查昵称重复
         static $sqlFormat = "SELECT count(*) as rows FROM `tab_rolename` WHERE roleName='%s';";
         $sql = sprintf($sqlFormat, $roleName);
         $n = daoInst()->query($sql)->fetch();

+ 182 - 0
Gameserver/Amfphp/util/CDbUtil.php

@@ -0,0 +1,182 @@
+<?php
+
+// php + mysql fuction class
+error_reporting(E_ALL & ~ E_NOTICE);
+
+/**
+ * CDB工具类[APHP三大操作单元之一]
+ * @author jgao
+ */
+class CDbUtil {
+
+    var $conn = 0;
+
+    function dbconn($dbhost, $dbport, $dbuser, $dbpw, $dbname) {
+        $this->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, MYSQL_NUM);
+    }
+
+    /**
+     * 将查询结果作为关联数组返回
+     * @param string $SQL
+     * @return array
+     */
+    function fetch_array($SQL) {
+        return $this->fetch_result($SQL, MYSQL_ASSOC);
+    }
+
+    /**
+     * 从结果中取一行作为结果返回
+     * @param string $SQL
+     * @param int $result_type 1. 关联数组, 2. 索引数组, 3 both
+     * @return type
+     */
+    function fetch_result($SQL, $result_type = MYSQL_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 . '<br /><br />' . mysqli_error());
+    }
+
+}