一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - PHP教程 - 簡單的php寫入數(shù)據(jù)庫類代碼分享

簡單的php寫入數(shù)據(jù)庫類代碼分享

2019-12-08 17:52PHP教程網(wǎng) PHP教程

簡單的php寫入數(shù)據(jù)庫類代碼分享,學(xué)習(xí)php的朋友可以參考下。

不知道原創(chuàng)要寫到隨筆里。 
All right ,第一篇博文。 
有三個類: 
1 . 過濾輸入(輕量級的) 
class input_filter 
負(fù)責(zé)將參數(shù),如$_GET,$_POST 這些過濾 
返回值類型為 數(shù)組,用作 made_sql 類的參數(shù) 
2 . 轉(zhuǎn)換成SQL語句 
class made_sql 
參數(shù)的類型為數(shù)組和表名(字符串),數(shù)組的鍵名為表的列名,值為插入值 
返回值類型為 字符串 ,用作 mysql ->query方法 的參數(shù) 
3 . 數(shù)據(jù)庫查詢 
class mysql 
用到了單列模式,用靜態(tài)方法來獲取對象,具體參看 instanceof操作符的作用 

復(fù)制代碼代碼如下:


class input_filter 

private $input_all; // 要過濾的數(shù)組 
private $rustle; // 過濾后的結(jié)果 
//構(gòu)造函數(shù) 參數(shù)可以是$_GET or $_POST 這些 
public function __construct($input_C) 

if(is_array($input_C)) 
$this->input_all = $input_C ; 
else 
echo 'Parameter is not valid'; 
//初始化,不然后面第一次合并數(shù)組PHP不知道這是什么類型 
$this->rustle = array(); 

private function filter_arr() // 主函數(shù) 

foreach ($this->input_all as $key_input => $val_input) 

//如果鍵名不是字符串,那么返回錯誤信息 
// for key 
if(!is_string($key_input)) // error 

echo 'This key is not string'; 
return false; 

// The # is mysql Note . 
$key_one = str_replace('#','',$key_input); 
$key = htmlspecialchars($key_one,ENT_QUOTES,'UTF-8'); 
// 我沒找 # 的HTML轉(zhuǎn)義符,所以用空代替 
$val_one = str_replace('#','',$val_input); 
// 這個函數(shù)只轉(zhuǎn)化 < > ' " ,還有個類似函數(shù)會轉(zhuǎn)義所有符號 
$val = htmlspecialchars($val_one,ENT_QUOTES,'UTF-8'); 
// merger 
$rustle_one = array($key=>$val); 
//合并數(shù)組 
$this->rustle = array_merge($this->rustle,$rustle_one); 


//這個函數(shù)有點多余,留下以后擴展用 
public function get_filter_rustle() 

$this->filter_arr(); 
return $this->rustle ; 


調(diào)用方法: 

復(fù)制代碼代碼如下:


$filter = new filter_input($_GET) ; // or $_POST 
$input_data = $filter->get_filter(); 


轉(zhuǎn)換成SQL語句: 

復(fù)制代碼代碼如下:


class madesql 

private $Cnow_ary; // type array 傳入的參數(shù) 
private $Cname_str; 
private $insert_sql; //最終的sql語句 string type 
public function __construct($Cary,$Cname) 

//檢查傳入?yún)?shù)類型是否為數(shù)組 
if (! is_array($Cary)) 
return false; 
else 
$this->Cnow_ary = $Cary; // 寫入的值 
$this->Cname_str = $Cname; // 數(shù)據(jù)庫表名稱 
25 } 
private function setSql() // 主函數(shù) ,生產(chǎn)SQL語句 

foreach ( $this->Cnow_ary as $key_ary => $val_ary ) 

$cols_sql = $cols_sql.','.$key_ary; //列名組合 
$vals_sql = $vals_sql.', \''.$val_ary.'\'' ; //值 組合 

// 因為前面foreach的算法有點問題,第一個字符是逗號 
// 所以用sunstr_replace()刪除 ,自第一位起(0),只替換一個字符(1) 
$cols_sql = substr_replace($vals_sql,'',0,1); 
$vals_sql = substr_replace($vals_sql,'',0,1); 
$this->insert_sql = 
'INSERT INTO '.$this->Cname_str.' ( ' 
.$cols_sql.' ) VALUES ( '.$vals_sql.' )'; // 語句成型 

//擴展用 
public function getSql() 

$this->setSql(); 
return $this->insert_sql; 


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

復(fù)制代碼代碼如下:


class mysql 

private $connect; 
static $objectMysql; // 存放對象 
private function __construct() 7 { 
// 創(chuàng)建對象的時候這個構(gòu)造函數(shù)會被調(diào)用,用來初始化 
$connect = mysql_connect('db address','password','dbname'); 
$this->db = mysql_select_db('db',$connect); 

public static function Mysql_object() 

//instanceof 操作符用于檢查對象是否屬于某個類或者接口的實例。我說的不是很規(guī)范... 
//如果$objectMysql不是mysql(self)的實例,那么就創(chuàng)建一個 
if(! self::$objectMysql instanceof self) 
self::$objectMysql = new mysql(); 
//這時候的$objectMysql就已經(jīng)是一個對象 
return self::$objectMysql; 

public function query($sql) 

return mysql_query($sql,$this->db); 


   


All right ,歸納一下使用方法 

復(fù)制代碼代碼如下:


$filter = new filter_input($_GET) ; // or $_POST 
$input_data = $filter->get_filter(); 
$madeSql = new madesql($input_data,'tableName'); 
$sql = $madeSql->getSql(); 
$mysql = mysql::Mysql_object() ; 
if( $mysql->query($sql) ) 
echo 'Ok'; 
else 
echo 'failure'; 


只需要這幾行調(diào)用代碼即可以完成寫入數(shù)據(jù)庫的操作 
另外再說一下構(gòu)造函數(shù)的私有公有問題,書上的mysql單例模式中構(gòu)造函數(shù)是聲明為了private ,而沒有單例模式的類如此則會產(chǎn)生編譯錯誤,即 PHP 不能創(chuàng)建一個對象 ,查了下。 

原因在于創(chuàng)建對象往往在類外面進(jìn)行,這樣就產(chǎn)生了無法訪問構(gòu)造函數(shù)的問題。 而單列模式是在自身類中創(chuàng)建對象,因此訪問private方法沒有限制。 

原先以為單例模式只是防止創(chuàng)建相同的對象,現(xiàn)在看來單例模式可以將構(gòu)造函數(shù)封裝起來,確實提高了安全性 
  filter_input類 的結(jié)果可以直接用作 madesql類 的參數(shù)的 前提是 : 
表單的name必須和數(shù)據(jù)庫的列名相同,否則你就白看這么多

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日不卡| 大学生特黄特色大片免费播放 | 久久精品国产久精国产果冻传媒 | 91真人毛片一级在线播放 | 91制片厂制作传媒免费版樱花 | 国内精品久久久久影院男同志 | 四虎国产成人亚洲精品 | 好舒服好爽再快点视频 | 欧美z0z0人禽交 | 国产高清在线播放刘婷91 | 日本十大顶级绝伦推理片 | 久久免费看少妇高潮A片JA | 2022超帅男同gayxxx | 手机看片福利盒子久久 | 疯狂刺激的3p国产在线 | 国产私人影院 | jux539原千岁在线播放 | 国产精品久久久久网站 | 狠狠色综合久久婷婷 | 黄色a∨| 亚洲狠狠婷婷综合久久蜜桃 | 亚洲国产精品二区久久 | 欧美精品一区二区三区久久 | 亚洲 欧美 国产 在线 日韩 | 欧美一级专区免费大片俄罗斯 | 99久久免费国产精品热 | 69一级毛片| 男人猛进猛出女人下面视频 | 成人欧美一区二区三区 | 三年片韩国在线观看 | 日韩欧美一区二区不卡 | 好姑娘在线完整版视频 | 亚洲精品 欧美 | 久久成人伊人欧洲精品AV | 美女禁区视频免费观看精选 | 91精品国产亚一区二区三区 | 国产高清在线精品一区二区三区 | 日韩中文字幕在线不卡 | 5g影院天天影院天天爽影院网站 | 亚洲人成网站在线观看妞妞网 | 欧美疯狂做爰xx |