在WEB應用程序開發數據庫操作類是一個必不可少的東西了,當然大家可以直接連接數據庫進行查詢,但這樣維護不方便,下面我整理了一個不錯的PHP數據庫處理類與各位分享.
最近在看后盾網的php視頻,主要內容是相關制作一個博客系統,感覺還是很有收獲,簡單的數據庫處理類,下面是其中講到的一個簡單的數據庫處理類,請見源碼:
- <?php
- /**
- * Created by JetBrains PhpStorm.
- * User: YangLiu
- * Date: 2013-7-12
- * Time: 下午6:19
- * Description:這是一個簡單的數據庫操作類,便于快速向數據庫插入數據、刪除數據,更新數據
- */
- class db {
- //數據庫連接
- protected $mysqli;
- //表名
- protected $table;
- //選項
- protected $opt;
- /***
- * 構造方法
- * @param $tab_name
- */
- function __construct($tab_name){
- $this->config($tab_name);
- }
- // 配置方法
- protected function config($tab_name){
- $this->db=new mysqli(DBHOST,DBUSER,DBPWD,DBNAME);
- //DBFIX為數據庫表前綴
- $this->table = DBFIX.$tab_name;
- if(mysqli_connect_errno()){
- echo "數據庫連接錯誤".mysqli_connect_errno();
- exit();
- }
- $this->db->query("SET NAMES 'GBK'");
- //給opt數組設置初始值
- $this->opt['field'] = '*';
- $this->opt['where']=$this->opt['order']=$this->opt['limit']=$this->opt['group'] = '';
- }
- // 獲得當前表字段
- function tbFields(){
- $result = $this->db->query("DESC {$this->table}");
- $fieldArr = array();
- while(($row = $result->fetch_assoc())!=false){
- $fieldArr[] = $row['Field'];
- }
- return $fieldArr;
- }
- // 獲得查詢字段
- function field($field){
- $fieldArr = is_string($field)?explode(",",$field):$field;
- if(is_array($fieldArr)){
- $field = '';
- foreach($fieldArr as $v){
- $field.='`' . $v. '`' . ',';
- }
- }
- return rtrim($field,',');
- }
- // SQL條件方法
- function where($where){
- $this->opt['where'] = is_string($where) ?"WHERE " . $where : '';
- return $this;
- }
- //limit方法
- function limit($limit){
- $this->opt['limit'] = is_string($limit) ? "LIMIT ".$limit : '';
- return $this;
- }
- //排序方法
- function order($order){
- $this->opt['order'] = is_string($order) ? "ORDER BY ".$order:'';
- return $this;
- }
- // 分組GROUP BY
- function group($group){
- $this->opt['group'] = is_string($group) ? 'GROUP BY'.$group : '';
- return $this;
- }
- //SELECT
- function select(){
- $sql = "SELECT {$this->opt['field']} FROM {$this->table}
- {$this->opt['where']} {$this->opt['group']} {$this->opt['limit']}
- {$this->opt['order']} ";
- return $this->sql($sql);
- }
- //DELETE方法
- function delete($id=''){
- if($id == '' && emptyempty($this->opt['where'])){
- die('查詢條件不能為空');
- }
- if($id != ''){
- if(is_array($id)){
- $id = implode(',',$id);
- }
- $this->opt['where'] = "WHERE id IN (" .$id. ")";
- }
- $sql = "DELETE FROM {$this->table} {$this->opt['where']} {$this->opt['limit']}";
- //echo $sql."<br/>";
- return $this->query($sql);
- }
- //查閱單條記錄
- function find($id){
- $sql = "SELECT {$this->opt['field']} FROM {$this->table} WHERE `id` = {$id}";
- //echo $sql.'<br>';
- return $this->sql($sql);
- }
- // 添加數據
- function insert($args){
- is_array($args) or die('參數非數組');
- $fields = $this->field(array_keys($args));
- $values = $this->values(array_values($args));
- $sql = "INSERT INTO {$this->table} ({$fields}) VALUES($values)";
- if($this->query($sql)>0){
- return $this->db->insert_id;
- }
- return false;
- }
- // 更新UPDATE
- function update($args){
- is_array($args) or die("參數非數組");
- if(emptyempty($this->opt['where'])) die("條件不能為空");
- $set = '';
- $gpc = get_magic_quotes_gpc();
- while(list($k,$v) = each($args)){
- $v = !$gpc?addslashes($v):$v;
- $set.="`{$k}`='".$v."',";
- }
- $set = rtrim($set,',');
- $sql = "UPDATE {$this->table} SET $set {$this->opt['where']}";
- return $this->query($sql);
- }
- // 統計所有記錄數
- function count($tabname=''){
- $tabname = $tabname==''?$this->table:$tabname;
- $sql = "SELECT `id` FROM {$tabname} {$this->opt['where']}";
- //echo $sql.'<br/>';
- return $this->query($sql);
- }
- // 數據數組轉為字符串格式,同時進行轉議
- protected function values($value) {
- if (! get_magic_quotes_gpc ()) {
- $strValue = '';
- foreach ( $value as $v ) {
- $strValue .= "'" . addslashes ( $v ) . "',";
- }
- } else {
- foreach ( $value as $v ) {
- $strValue .= "'$v',";
- }
- }
- return rtrim ( $strValue, ',' );
- }
- // 獲得結果集
- function sql($sql) {
- $result = $this->db->query($sql) or die($this->dbError());
- $resultArr = array();
- while(($row = $result->fetch_assoc())!=false){
- $resultArr[] = $row;
- }
- return $resultArr;
- }
- // 沒有結果集的SQL
- function query($sql){
- $this->db->query($sql) or die($this->dbError());
- return $this->db->affected_rows;
- }//開源代碼Vevb.com
- // 返回錯誤
- function dbError(){
- return $this->db->error;
- }
- }
- ?>
以上是一個簡單的PHP數據庫處理類,就它的使用特地做個說明,下面對以上代碼中的部分相常量和變量作以說明:
$mysqli:對當前數據庫的鏈接引用
$table:當前數據庫的表名
$opt:當前數據庫的表的所有字段名
DBFIX:數據庫配置中的常量“表前綴”
DBHOST:數據庫主機
DBFIX:數據庫用戶名
DBPWD:數據庫密碼
DBNAME:數據庫名稱
數據庫處理類的使用方法,配置數據庫處理類,在使用數據庫處理類之前,你必須有一個相關的配置文件,下面我就寫一個connect.php文件,文件內容如下所示:
- <?php
- /**
- * Created by JetBrains PhpStorm.
- * User: YangLiu
- * Date: 2013-7-14
- * Time: 下午2:15
- * Description:數據庫配置文件
- */
- define("DBHOST",'localhost'); //定義數據庫服務器連接地址
- define("DBUSER",'root'); //數據庫用戶名
- define("DBPWD",''); //數據庫密碼
- define("DBNAME",'blog'); //定義數據庫名
- define("DBFIX",'blog_'); //定義數據庫表的前綴
- ?>
為了讓您更簡單的理解,我就沒有建立更多的目錄,把所有的文件全部放在同一目錄,如果您覺得不好,也可以自行建立目錄,并重新根據情況來調整文件位置.
數據庫處理類的使用,使用數據庫,你要先引用connect.php和db.class.php文件,下面舉一個demo.php文件為例:
- <?php
- /**
- * Created by JetBrains PhpStorm.
- * User: LiuYang
- * Date: 2013-9-15
- * Time: 下午10:39
- * Description:演示DEMO文件
- */
- include './config.php'; //加載配置文件
- include './page.class.php'; //加載數據庫處理類
- $db = $db = new db('blog'); //鏈接數據庫的表blog_blog
- ?>
輸出數據庫表的字段名,輸出數據庫表的字段名,用的tbFields方法,代碼如下:
$tbField = $db->tbFields();var_dump($tbField);
其輸出結果如下:
- array (size=5)
- 0 => string 'id' (length=2)
- 1 => string 'btitle' (length=6)
- 2 => string 'content' (length=7)
- 3 => string 'status' (length=6)
- 4 => string 'cid' (length=3)
下面,再介紹一個數據庫處理類中的相關的另一個方法:
echo $db->field($tbFields);
最后的輸出結果:`id`,`btitle`,`content`,`status`,`cid`
統計所有記錄數,數據庫類中還有一個方法,用來統計數據的所有條數count方法,在我們的分頁處理中,它也就會顯示得重要了,代碼如下:
echo $db->count('blog');
注意:以上代碼是根據id來查閱,其中count方法代碼如下:
- // 統計所有記錄數
- function count($tabname=''){
- $tabname = $tabname==''?$this->table:$tabname;
- $sql = "SELECT `id` FROM {$tabname} {$this->opt['where']}";
- return $this->query($sql);
- }
數據庫的增、刪、改、查
數據庫的相關操作無外乎就是增、刪、改、查,下面對其作以簡單介紹.
插入數據
insert方法向數據庫中插入數據,其中傳入的參數為一個數組,如array('btitle'=>'www.49028c.com','content'=>'小天地,大世界是一個技術交流博客')。其中數組的鍵名即為表的字段名,而鍵值即為想要插入的內容,請看下面的示例:
$inserArr = array('btitle'=>'www.49028c.com','content'=>'小天地,大世界是一個技術交流博客');$db->insert($inserArr);
刪除數據
delete方法是專門來刪除數據,為了防止數據被誤刪,數據刪除必須存在一定的限制,比如說通過where、limit方法來作一定的限制,或者你可以直接傳入要刪除數據的id,你可以查看下面的示例:
- //刪除id為3的數據
- $db->delete(3);
- //刪除id>5的數據
- $db->where('id>5')->delete();
- //刪除從20起后的10條數據
- $db->where('id>5')->limit('20,10')->delete();
更新數據
數據添加了,有時發現錯誤,就得高法來更改數據,update方法用來更新數據,update方法與insert方法類似,都接受一個數組參數,數組的鍵名為表的字段名,對應的鍵值為要插入的內容,下面的內容就是把id為29的數據更新為array中的數據,代碼如下:
- $db->where('id=29')->update(array('btitle'=>'www.49028c.com','content'=>'小天地,大世界是一個技術交流博客'));
- //更新id>35的所有數據
- $db->where('id>29')->update(array('btitle'=>'www.49028c.com','content'=>'小天地,大世界是一個技術交流博客'));
查找數據
數據庫處理類中提供了select方法,可以很方便的進行數據的查找,結合著where、limit方法,就可以查找相應的數據,具體的使用方法請見下例:
- $db->select(); //查找所有數據
- $db->where('id=0')->select(); //查找指定數據
- $db->where('id>9')->select(); //查找id大于9的數據集合
- $db->limit('10,9')->select(); //從查找數據第10條以后的9條數據
- $db->where('id>50')->limit('10,9')->select();
其它方法:除了以上幾種方法之外,數據庫處理類還提供了如下的方法.
order方法:主要是來更改查找數據排序方式
group方法:數組方法
find方法:查找單條記錄
sql方法:直接執行數據SQL語句,并返回處數據集
query方法:也可以執行數據SQL語句,但不返回數據集,而是返回受影響的記錄條數.
關于數據庫處理類,最后說明一點,此數據庫處理類是后盾網PHP視頻中所講,有助于像我這樣的新手來學習,故特地整理.
新聞熱點
疑難解答