123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?php
- /**
- * 数据库操作类
- */
- class MysqlHandler {
- private $host; // 主机地址
- private $port; // 端口
- private $user; // 授权用户
- private $pwd; // 密码
- private $database; // 数据库名称
- private $db_charset; // 数据库字符集
- private $conn; // 数据库连接资源
- //构造函数,与类名同名
- /**
- * 参数$conf 是配置数组,通过配置,初始化并创建一个数据库连接
- */
- public function MysqlHandler($conf) {
- $this->host = $conf['host'];
- $this->port = $conf['port'];
- $this->user = $conf['user'];
- $this->pwd = $conf['pwd'];
- $this->database = $conf['db_name'];
- if(empty($conf['db_charset'])){
- $this->db_charset = 'utf8';
- } else {
- $this->db_charset = strtolower($conf['db_charset']);
- }
- $this->init_connect();
- $this->select_db();
- }
- /**
- * 初始化数据库连接 无返回值
- */
- private function init_connect() {
- $server = $this->host.":".$this->port;
- $this->conn = mysqli_connect($server, $this->user, $this->pwd,$this->database);
- if (mysqli_connect_errno($this->conn))
- {
- echo "连接 MySQL 失败: " . mysqli_connect_error();
- }
- }
- /**
- * 选择要访问的数据库
- */
- private function select_db() {
- $set_sql = "set character set ".$this->db_charset;
- mysqli_query($this->conn,$set_sql);
- $set_sql = " set names ".$this->db_charset;
- mysqli_query($this->conn,$set_sql);
- }
- /**
- * 执行查询语句。返回结果集二维数组
- * SELECT,SHOW,EXPLAIN 或 DESCRIBE
- */
- public function query($sql) {
- $rs = mysqli_query ($this->conn,$sql);
- //$this->save_log($sql);
- if(mysqli_num_rows($rs)>0) {
- while ($row = mysqli_fetch_array($rs, MYSQLI_ASSOC)) {
- $records_arr[] = $row;
- }
- return $records_arr;
- } else {
- return null;
- }
- }
- /**
- * 查询单个记录的第一列,例如
- * @param string $sql
- */
- public function query_first_column($sql) {
-
- if(strrpos(strtolower($sql),'union')!== false){
- Log::save_run_log($sql, 'hacker');
- }
- $rs = mysqli_query ($this->conn,$sql);
- if(mysqli_num_rows($rs)>0) {
- if ($row = mysqli_fetch_array($rs, MYSQL_ASSOC)) {
- foreach ($row as $key => $val){
- return $val;
- }
- return null;
- } else {
- return null;
- }
- } else {
- return null;
- }
- }
- /**
- * 执行数据库操作脚本语句 返回成功或失败 : TRUE OR FALSE
- * update
- */
- public function execute_sql($sql){
- return $this->exe_sql_and_log($sql);
- }
- /**
- * 执行插入操作返回数据id或失败 : ID OR FALSE
- * insert
- */
- public function insert_sql($sql){
- $rs = $this->exe_sql_and_log($sql);
- if($rs){
- $id = mysqli_insert_id($this->conn);
- return $id;
- }else{
- return false;
- }
- }
- /**
- * 返回成功或失败 : TRUE OR FALSE
- */
- private function exe_sql_and_log($sql) {
-
- $rs = mysqli_query($this->conn,$sql);
- $this->save_log($sql);
- if($rs){
- return true;
- }else{
- return false;
- }
- }
- /**
- * tostring 方法,查看本实例的连接参数。
- */
- public function to_string(){
- return "host:$this->host|port:$this->port|user:$this->user|pwd:$this->pwd|database:$this->database|chartset:$this->db_charset <br>";
- }
-
- public function save_log($sql){
- $info = mysqli_errno($this->conn) . "|$sql|" . mysqli_error($this->conn);
- Log::save_run_log($info, 'db');
- }
-
- public function close(){
- mysqli_close($this->conn);
- }
- }
- ?>
|