亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php數據庫寫入操作類

2024-09-04 11:44:15
字體:
來源:轉載
供稿:網友

有三個類:

1,過濾輸入,輕量級的 class input_filter,負責將參數,如$_GET,$_POST 這些過濾,返回值類型為 數組,用作 made_sql 類的參數.

2,轉換成SQL語句 class made_sql,參數的類型為數組和表名(字符串),數組的鍵名為表的列名,值為插入值.返回值類型為 字符串,用作 mysql ->query方法的參數.

3,數據庫查詢 class mysql 用到了單列模式,用靜態方法來獲取對象,具體參看 instanceof操作符的作用.

1,過濾輸入 class input_filter 類代碼如下:

  1.   class input_filter 
  2.   { 
  3.    
  4.        private $input_all// 要過濾的數組 
  5.        private $rustle;     // 過濾后的結果 
  6.         
  7.       //構造函數 參數可以是$_GET or $_POST 這些 
  8.      public function __construct($input_C)  
  9.      { 
  10.          if(is_array($input_C)) 
  11.               $this->input_all = $input_C ; 
  12.          else 
  13.               echo 'Parameter is not valid';  
  14.           
  15.          //初始化,不然后面第一次合并數組PHP不知道這是什么類型       
  16.          $this->rustle = array();   
  17.      } 
  18.        
  19.      private function filter_arr()  // 主函數  
  20.      { 
  21.           
  22.          foreach ($this->input_all as  $key_input => $val_input
  23.          { 
  24.              //如果鍵名不是字符串,那么返回錯誤信息 
  25.              // for key 
  26.              if(!is_string($key_input))  // error 
  27.                 { 
  28.                   echo 'This key is not string'
  29.                   return false; 
  30.                 } 
  31.              // The # is mysql Note .   
  32.              $key_one = str_replace('#','',$key_input);  
  33.              $key = htmlspecialchars($key_one,ENT_QUOTES,'UTF-8'); 
  34.                
  35.              // 我沒找 # 的HTML轉義符,所以用空代替 
  36.              $val_one = str_replace('#','',$val_input); 
  37.              // 這個函數只轉化 < > ' "  ,還有個類似函數會轉義所有符號 
  38.              $val = htmlspecialchars($val_one,ENT_QUOTES,'UTF-8'); 
  39.               
  40.              // merger       
  41.              $rustle_one = array($key=>$val); 
  42.              //合并數組 
  43.              $this->rustle = array_merge($this->rustle,$rustle_one); 
  44.          } 
  45.           
  46.      } 
  47.       
  48.      //這個函數有點多余,留下以后擴展用 
  49.      public function get_filter_rustle() 
  50.      {//開源代碼Vevb.com 
  51.          $this->filter_arr(); 
  52.          return  $this->rustle ; 
  53.      } 
  54.  
  55.  } 
  56.  
  57. 調用方法: 
  58.  
  59. $filter = new filter_input($_GET) ; // or $_POST 
  60. $input_data = $filter->get_filter(); 

2,轉換成SQL語句,class madesql類代碼如下:

  1. class madesql 
  2.     { 
  3.         private $Cnow_ary;   // type array  傳入的參數 
  4.         private $Cname_str
  5.          
  6.         private $insert_sql;  //最終的sql語句  string type 
  7.          
  8.         
  9.  
  10.   
  11.         
  12.        public function  __construct($Cary,$Cname
  13.        { 
  14.           //檢查傳入參數類型是否為數組 
  15.           if (! is_array($Cary))   
  16.               return false;  
  17.           else 
  18.               $this->Cnow_ary = $Cary;  // 寫入的值 
  19.          
  20.           $this->Cname_str = $Cname;  // 數據庫表名稱  
  21.          
  22.  
  23.        } 
  24.         
  25.        private function setSql()  // 主函數 ,生產SQL語句 
  26.        { 
  27.     
  28.             foreach ( $this->Cnow_ary as  $key_ary => $val_ary ) 
  29.             { 
  30.                 $cols_sql = $cols_sql.','.$key_ary//列名組合 
  31.                 $vals_sql = $vals_sql.', ''.$val_ary.''' ; //值 組合 
  32.             } 
  33.              // 因為前面foreach的算法有點問題,第一個字符是逗號 
  34.              // 所以用sunstr_replace()刪除 ,自第一位起(0),只替換一個字符(1)     
  35.              $cols_sql = substr_replace($vals_sql,'',0,1);    
  36.              $vals_sql = substr_replace($vals_sql,'',0,1); 
  37.                
  38.              $this->insert_sql =  
  39.              'INSERT INTO '.$this->Cname_str.' ( ' 
  40.                                 .$cols_sql.' ) VALUES ( '.$vals_sql.' )'// 語句成型 
  41.        } 
  42.        //擴展用 
  43.        public function getSql() 
  44.        { 
  45.            $this->setSql(); 
  46.            return $this->insert_sql; 
  47.     } 

3,數據庫查詢,mysql類代碼如下:

數據庫查詢類是參照書上的單列模式,用靜態方法獲取對象,這樣在一個腳本里只有一個數據庫查詢類的實例.我想單例模式用于這個類還是有點用的.

  1. class mysql 
  2.      { 
  3.          private $connect;  
  4.          static  $objectMysql// 存放對象 
  5.           
  6.          private function  __construct()  
  7.  
  8.          {     
  9.             // 創建對象的時候這個構造函數會被調用,用來初始化 
  10.             $connect = mysql_connect('db address','password','dbname'); 
  11.            $this->db = mysql_select_db('db',$connect);     
  12.         } 
  13.   
  14.         public static function Mysql_object() 
  15.         {     
  16.             //instanceof 操作符用于檢查對象是否屬于某個類或者接口的實例。我說的不是很規范... 
  17.            //如果$objectMysql不是mysql(self)的實例,那么就創建一個 
  18.             if(! self::$objectMysql instanceof self) 
  19.                  self::$objectMysql = new mysql(); 
  20.   
  21.             //這時候的$objectMysql就已經是一個對象 
  22.             return self::$objectMysql;    
  23.         } 
  24.         public function query($sql
  25.         { 
  26.             return mysql_query($sql,$this->db); 
  27.         } 
  28.    
  29.   } 

歸納一下使用方法:

  1. $filter = new filter_input($_GET) ; // or $_POST http://www.111cn.net  
  2. $input_data = $filter->get_filter();  
  3.  
  4. $madeSql = new madesql($input_data,'tableName'); 
  5. $sql = $madeSql->getSql(); 
  6.  
  7. $mysql = mysql::Mysql_object() ;  
  8. if$mysql->query($sql) ) 
  9.     echo 'Ok'
  10. lse 
  11.    echo 'failure'

只需要這幾行調用代碼即可以完成寫入數據庫的操作.

另外再說一下構造函數的私有公有問題,書上的mysql單例模式中構造函數是聲明為了private,而沒有單例模式的類如此則會產生編譯錯誤,即 PHP 不能創建一個對象,查了下.

原因在于創建對象往往在類外面進行,這樣就產生了無法訪問構造函數的問題,而單列模式是在自身類中創建對象,因此訪問private方法沒有限制.

原先以為單例模式只是防止創建相同的對象,現在看來單例模式可以將構造函數封裝起來,確實提高了安全性.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美中文| 成人自拍性视频| 日韩欧美极品在线观看| 国产在线观看一区二区三区| 欧美精品一区在线播放| 国产精品一区二区三区久久久| 国产+成+人+亚洲欧洲| 黑人巨大精品欧美一区二区三区| 黑人与娇小精品av专区| 久久久久久久久电影| 精品偷拍一区二区三区在线看| 国产成人福利视频| 亚洲精品网址在线观看| 狠狠躁夜夜躁久久躁别揉| 欧美亚洲视频在线看网址| 亚洲国产古装精品网站| 久久亚洲精品一区| 中文字幕欧美在线| 亚洲久久久久久久久久| 国产精品久久久久高潮| 日韩在线欧美在线| 亚洲国产私拍精品国模在线观看| 久久免费少妇高潮久久精品99| 成人两性免费视频| 亚洲欧美日韩天堂| 亚洲精品资源美女情侣酒店| 91高清在线免费观看| 久久天天躁狠狠躁夜夜躁2014| 亚洲伦理中文字幕| 97欧美精品一区二区三区| 国产精品香蕉在线观看| 久久久久久国产精品三级玉女聊斋| 国产精品高潮呻吟久久av无限| 日韩乱码在线视频| 久久777国产线看观看精品| 成人黄色午夜影院| 国外日韩电影在线观看| 国产精品www色诱视频| 91老司机精品视频| 国产精品爽黄69天堂a| 色综合久久悠悠| 国产成人精品久久二区二区| 欧美大片免费看| 亚洲国产一区二区三区在线观看| 欧美一区二区视频97| 精品美女国产在线| 亚洲女同性videos| 久久频这里精品99香蕉| 午夜精品久久久久久久男人的天堂| 亚洲系列中文字幕| 久久这里有精品| 成人福利视频在线观看| 日韩精品一二三四区| 在线观看国产精品日韩av| 亚洲精品wwww| 国产一区深夜福利| 亚洲色图美腿丝袜| 亚洲国产天堂久久国产91| 亚洲一区二区久久久| 国产亚洲欧美日韩美女| 亚洲人成人99网站| 国产精品免费电影| 国产精品高潮呻吟久久av野狼| 国产精品专区第二| 91精品国产电影| 亚洲国产高清自拍| 亚洲第一免费播放区| 精品久久久久久中文字幕一区奶水| 国产激情综合五月久久| 久久精品视频在线| 国产精品一区=区| 久久国产精彩视频| 欧美精品福利视频| 国产精品v日韩精品| 性欧美办公室18xxxxhd| 日韩中文字幕免费视频| 2019最新中文字幕| 欧美日韩一二三四五区| 亚洲a成v人在线观看| 51视频国产精品一区二区| 亚洲一区二区自拍| 亚洲国产精品va在线| 成人午夜在线影院| 日韩精品在线观看一区| 国产精品福利在线观看| 久久久99免费视频| 国产一区视频在线播放| 欧美日韩亚洲激情| 久久男人资源视频| 亚洲免费精彩视频| 亚洲天堂免费在线| 国产精品视频久久久| 亚洲精品v欧美精品v日韩精品| 555www成人网| 成人免费大片黄在线播放| 亚洲国产成人91精品| 欧美精品999| 欧美成人三级视频网站| 中文在线资源观看视频网站免费不卡| 国产精品欧美日韩一区二区| 亚洲精品中文字幕女同| 国产亚洲精品久久久| 国产免费亚洲高清| 精品视频久久久久久久| 91日本视频在线| 欧美猛交免费看| 青青a在线精品免费观看| 亚洲人成电影网站色xx| 原创国产精品91| 国产在线播放不卡| 欧美精品久久久久久久久久| 国产日韩中文字幕| 色综合伊人色综合网站| 91精品国产91久久久久久吃药| 欧美精品在线观看91| 国产日本欧美视频| 亚洲福利在线视频| 欧美最近摘花xxxx摘花| 51精品国产黑色丝袜高跟鞋| 欧美一区二粉嫩精品国产一线天| 九九热99久久久国产盗摄| 亚洲成人a级网| 久久久久久久久久国产精品| 91视频8mav| 欧美孕妇孕交黑巨大网站| 久久精品国产久精国产思思| 国产免费成人av| 亚洲免费一在线| 成人免费观看a| 成人黄色av网| 久久精品视频在线观看| 亚洲va男人天堂| 91夜夜未满十八勿入爽爽影院| 成人免费网视频| 亚洲午夜久久久久久久| 狠狠躁夜夜躁人人爽天天天天97| 伊人男人综合视频网| 国产精品18久久久久久麻辣| 欧美一级淫片videoshd| 欧美激情亚洲一区| 色在人av网站天堂精品| 国产免费一区视频观看免费| 欧美大尺度电影在线观看| 亚洲精品av在线| 欧美成人手机在线| 91麻豆国产精品| 国产精品大陆在线观看| 成人做爽爽免费视频| 久久精品电影一区二区| 一本色道久久综合亚洲精品小说| 欧美大尺度激情区在线播放| 欧美中文字幕在线播放| 国产精品免费网站| 91九色单男在线观看| 国产精品九九久久久久久久| 亚洲精品中文字| 日韩中文视频免费在线观看| 国产精品99久久久久久人| 久久久久久一区二区三区| 国产精品草莓在线免费观看| 91在线视频成人| 在线观看国产精品日韩av| 国语自产精品视频在免费| 久久久91精品国产|