php 的mysql操作類

來源:互聯網
上載者:User

標籤:

親自測試,網上其他版本沒法用,有很多錯誤,這是本人親自測試用的,絕對增刪改查都可以。

<?php/** * Created by Netbeans. * User: Lugo * Date: 16-7-14 * Version: 1.0.0 * Time: 上午10:50 */    class MysqlHelper {                const HOST="localhost";        const DATABASE = "demo";        const ENCODING = "UTF8";        private $uname = 'root';        private $pwd = '';                private static $_instance;                private function __construct($db=NULL) {            $this->uname='root';            $this->pwd='';            $db == NULL ? $this->connect($this->uname,  $this->pwd) : $this->connect($this->uname,  $this->pwd,$db);        }                        private function connect($uname,$pwd,$db=NULL) {            $link = mysqli_connect(self::HOST, $uname, $pwd) or die($this->error());            if($db == null) {                mysqli_select_db( $link,self::DATABASE) or die('Error:沒有監測到'.self::DATABASE.'資料庫!');            }  else {                mysqli_select_db($link, $db) or die ('Error:沒有監測到'.self::DATABASE.'資料庫');            }            //$this->query("SET NAMES".self::ENCODING) or die ('字元集設定錯誤');            mysqli_set_charset($link, "utf8");            return $link;        }                        //單例模式(讓類只有一個靜態對象)        public static function getInstance($db=null){            if(!(self::$_instance instanceof self)) {                self::$_instance = $db == null ? new self() : new self($db);            }            return self::$_instance;        }                                //防止對象被複製        function __clone() {            trigger_error('不允許複製',E_USER_ERROR);        }                        /**************MySQL基本操作方法**************/                function query($sql) {            $conn = $this->connect("root", "","demo");            return  mysqli_query($conn, $sql) ;        }                        function fetch_array($query,$result_type=MYSQL_ASSOC) {                      return mysqli_fetch_array($query,$result_type) ;        }                //擷取一條記錄(MYSQL_ASSOC,MYSQL_NUM,MYSQL_BOTH)        function get_one($sql,$result_type = MYSQLI_ASSOC){            $query = $this->query($sql);            $rt = $this->fetch_array($query,$result_type);            return $rt;        }                        //擷取全部記錄        public function get_all($sql,$result_type = MYSQL_ASSOC){            $query = $this->query($sql);            $rt = array();                      while ($row = $this->fetch_array($query,$result_type)){                array_push($rt, $row);            }            return $rt;        }                                //返回上一次 MySQL操作所影響的記錄行數        function affected_rows(){            return mysqli_affected_rows();        }                        function result($query,$row){            return mysqli_result($query, $row);        }                function error(){            return mysqli_error();        }                        function num_rows($query){            return mysqli_num_rows($query);        }                                function num_fields($query){            return mysqli_num_fields($query);        }                        function free_result($query){           return mysqli_free_result($query);         }                function insert_id(){            return mysqli_insert_id();        }                                //從結果集中取得一行作為數字數組        function  fetct_row($query){            return mysqli_fetch_row($query);        }                function version(){            return mysql_get_server_info();        }                        function close(){            return mysqli_close();        }                        /**************自訂方法:增刪改查 *************/        /**         * @param $table 資料表名         * @param null $name 資料表欄位名         * @param  $var 資料表欄位名對應的值         */                function fn_insert($table,$name,$val=NULL) {            if($val == NULL) {                $this->query("INSERT INTO $table VALUES ($name)");            }  else {                $this->query("INSERT INTO $table ($name)  VALUES ($val)");            }        }                 /**         * @param $table 資料表名        * @param null $where 尋找條件的參數和值        */        function fn_delete($table,$where = NULL) {                        if($where == NULL ){                //刪除表中所有資料,別亂來啊                $this->query("DELETE FROM ",$table);            }  else {                //刪除自訂資料                $whereParam = SelectOr::builtWhere($where);                $this->query("DELETE FROM $table WHERE ". $whereParam) ;            }        }                 /**        * @param $table 資料表名        * @param $setVal 更新的參數和值        * @param null $where 尋找條件的參數和值          *UPDATE `tableName` SET `description` = '中國館是短髮' WHERE `user`.`id` = 6;        */                function fn_update($table,  $setVal , $where ) {                        //此處必須用selector::來訪問下,作為另一個類,必須要調用            $valParam = SelectOr::builtWhere($setVal,",");            if($where == NULL) {                $this->query("UPDATE $table SET ".$valParam);            }else {                $whereParam = SelectOr::builtWhere($where);                $this->query(("UPDATE $table SET ".$valParam."WHERE".$whereParam));            }        }                        /**         * @param  $name $selectOr 尋找條件設定作業對象,where部分內容         * @param int $selectName 所要選的欄位,比如 select id,name from ……  id和name就是本部分內容         * @param int $result_type 排序的種類,倒序或正序         */        function fn_select($table,  SelectOr $selectOr = NULL,$selectName=NULL,$result_type=MYSQLI_ASSOC) {            if($selectOr == NULL && $selectName==NULL) {                return $this->get_all("SELECT * FROM ".$table,$result_type);            }elseif ($selectName==NULL) {                $sql = "SELECT * FROM $table ".$selectOr->getRes();                return $this->get_all($sql,$result_type);            }else{                $sql = "SELECT $selectName FROM $table".$selectOr->getRes();                return $this->get_all($sql,$result_type);            }        }    }                //MySQL 選擇操作類    class SelectOr {        private $sql;        private static $obj;        function __construct() {        }                public static function getInstance() {            if(!(self::$obj instanceof self)) {                self::$obj = new self;            }            self::$obj->sql = "";            return self::$obj;        }                function where($where){            $this->sql.=" WHERE".  $this->builtWhere($where);            return $this;        }            function order($orderBy,$desc = TRUE) {            if($desc) {                $this->sql.=" ORDER BY $orderBy DESC";            }else{                $this->sql.=" ORDER BY $orderBy ASC";            }            return $this;        }                /*        function update($where){            $this->sql.= $this->builtWhere($where);            return $this;        }         *          */                function limit($num) {            $this->sql.=" LIMIT $num";            return $this;        }                        function getRes() {            //$sql就是上面的一個定義的變數,你需要在調用的頁面寫SelectOr::getInstance()->where(array("uid"=>1))時            //就會在where,order,limit中有$this->sql . = xxxx            return $this->sql;        }                             /**         * 封裝SQL語句Where         * @param $where         * @param string $connector 連結符號[,|and]         * @param string          */                function builtWhere($where,$connector="AND") {            if(is_string($where)) {                return $where;            }  elseif (is_array($where)) {                                $whereParam = " ";                $i = 1;                                //下面這個之前用$this來調用的,後來在update時報未定義,所以改成self:: 未分析之間區別                switch (self::arrLevel($where)) {                                        //如果是一緯數組,即參數形勢:array('id'=>'5','uname'=>'lugo')                                       case 1:                        foreach($where as $k=>$v) {                            //如果$v是字串,則用單引號引起來;                            if(is_string($v)) {                                $v = "'".$v."'";                            }                                                                                    //如果where語句長度是1則不加 and 操作                            if($i==count($where)) {                                $whereParam .="$k=$v";                            } else {                                $whereParam .= "$k=$v $connector";                            }                            $i++;                        }                        break;                                            //參數形式:array(array('id','>','5'),array('uname','!=','lugo'))                    case 2:                        for($k=0; $k<count($where) ; $k++) {                            if(count($where[$k]) == 3 ) {                                $key = $where[$k][0];                                $operate = $where[$k][1];                                $param = $where[$k][2];                                if(is_string($param)) {                                    $param = "'".$param."'";                                }                                                                //計算添加 "and" 次數                                if($i == count($where)) {                                    $whereParam .= " $key $operate $param";                                }else{                                    $whereParam.=" $key $operate $param $connector";                                }                                $i++;                            }                       }                       break;                    default :                    break;                }                return $whereParam;            }        }            //判斷數組緯度(只能判斷二維)        function arrLevel($array) {            $n = 1;            if(is_array($array)) {                foreach ($array as $val) {                    if(is_array($val)) {                        $n++;                        break;                    }                }            }            return $n;        }    }                                    ?> 



操作指南

<?php    //error_reporting(E_ALL^E_NOTICE^E_WARNING);    require_once("databases.php");            /*操作說明:    //選擇其他資料庫連接    MysqlHelper::getInstance()->connect("root","","demo");        //選擇語句    $res = MysqlHelper::getInstance()->fn_select("blog" ,  SelectOr::getInstance()->where(array('uid'=>2))->order("uid",TRUE),"uid,title,content,time");    $res = MysqlHelper::getInstance()->fn_select("user",  SelectOr::getInstance()->where(array('username'=>'hello3')));    $res = SelectOr::getInstance()->fn_select("library", SelectOr::getInstance()->where(array('max'=>100))->order("id",true)->limit(5),MYSQLI_ASSOC);        //插入的語句格式    $res= MysqlHelper::getInstance()->fn_insert("user","username,description","'hello的55','領導slslslsllslsl'");        //UPDATE `user` SET `description` = '中國館是短髮' WHERE `user`.`id` = 6;    $res = MysqlHelper::getInstance()->fn_update('user',array('description'=>'zzz'),array(array('username','=','hello3'),array('id','=','7')));    $res = MysqlHelper::getInstance()->fn_update('user', SelectOr::getInstance()->update(array('description'=>'這個之前亂碼了')),  SelectOr::getInstance()->update(array(array('username','=','hello3') ,array('id','=','7'))));        //刪除語句    $res = MysqlHelper::getInstance()->fn_delete("user",array(array('username','=','hello3'),array('id','=','8')));    $db->fn_delete("library",array(array('current','>','3'),array('max','!=','150')));    print_r($res);    */?> 



php 的mysql操作類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.