搜尋
首頁php教程PHP源码数据库的封装和引用

一、数据库的封装和引用

  之前写代码都是通过mysql取结果写的,这样写的缺点是每次要用数据时都需要写sql参数,并且要写很多份,而且当数据库换了,或者密码改了就需要修改每一个文件里的和mysql有关的参数,结果会很复杂。下面就把数据库的操作封装成一个类,每一次操作的时候去调用封装的类。

  以后就用封装类的方法写,防止换数据库、换电脑、或者是放到服务器上以后直接从封装的类里面更改数据库名称,用户名、密码等。就不需要改页面里的内容了。

 

1.查询语句

第1步:建一个封装类的文件DBDA.class.php

<?php//建一个封装类的文件DBDA.class.phpclass DBDA//定义一个类,类名为DBDA{    public $host="localhost";//4个比较常用的参数:服务器地址
    public $uid="root";//用户名
    public $pwd="666";//密码
    public $dbname="toupiao";//数据库名称
    
    //封装方法
    //1.返回二维数组的方法
    /**
    *给一个sql语句,返回执行的结果
    *@param string $sql 用户指定的sql语句
    *@param int $sql用户给的语句类型,0代表增删改,1代表查询。一般查询使用的比较多,让$type的默认值为1.如果是增删改再改$type的值。
    *@return array 返回查询的结果,如果是查询,返回二维数组。如果是增删改,返回$result。    */
    function Query($sql,$type=1)
    {        //造连接对象
        $db = new MySQLi("$this->host","$this->uid","$this->pwd","$this->dbname");        
        //执行sql语句
        $result = $db->query("$sql");        
        //从结果集对象里取数据。查询单独做一个方法,其它做另一个方法。
        if($type==1)//如果是查询        {            return $result->fetch_all();//返回查询的二维数组        }        else//如果是增删改        {            return $result;//返回$result        }
    }
}

 

第2步:将封装的类引用到页面中

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档</title></head><body>

<?phpinclude("DBDA.class.php");//将封装的类引入此页面$db = new DBDA();//新建一个对象$sql = "select * from info";var_dump($db->Query($sql));//第2个参数不写的话就是查询,因为默认值是1.?>

</body></html>

 

如果是增删改,结果返回boolean flase

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档</title></head><body>

<?phpinclude("DBDA.class.php");//将封装的类引入此页面$db = new DBDA();//新建一个对象/*$sql = "select * from info";
var_dump($db->Query($sql));//第2个参数不写的话就是查询,因为默认值是1.*/$sql = "update info set name='杨宁波' where code='p001'";var_dump($db->Query($sql,0));?>

</body></html>

 

 

让输出结果为关联数组

第1步:封装类

<?php//建一个封装类的文件DBDA.class.phpclass DBDA//定义一个类,类名为DBDA{    public $host="localhost";//4个比较常用的参数:服务器地址
    public $uid="root";//用户名
    public $pdw="666";//密码
    public $dbname="text1";//数据库名称
    
    //封装方法
    //1.返回二维数组的方法
    /**
    *给一个sql语句,返回执行的结果
    *@param string $sql 用户指定的sql语句
    *@param int $sql用户给的语句类型,0代表增删改,1代表查询。一般查询使用的比较多,让$type的默认值为1.如果是增删改再改$type的值。
    *@return array 返回查询的结果,如果是查询,返回二维数组。如果是增删改,返回$result。    */
    function Query($sql,$type=1)
    {        //造连接对象
        $db = new MySQLi($this->host,$this->uid,$this->pdw,$this->dbname);        
        //执行sql语句
        $result = $db->query($sql);        
        //从结果集对象里取数据。查询单独做一个方法,其它做另一个方法。
        if($type==1)//如果是查询        {            return $result->fetch_all();//返回查询的二维数组        }        else//如果是增删改        {            return $result;//返回$result        }
    }    
    //2.返回关联数组的方法
    /**
    *给一个sql语句,返回关联的二维数组
    *@param string $sql 用户指定的sql语句
    *@param int $sql用户给的语句类型,0代表增删改,1代表查询。一般查询使用的比较多,让$type的默认值为1.如果是增删改再改$type的值。
    *@return array 返回查询的结果,如果是查询,返回二维数组。如果是增删改,返回$result。    */
    function GuanQuery($sql,$type=1)
    {        //造连接对象
        $db = new MySQLi($this->host,$this->uid,$this->pdw,$this->dbname);        
        //执行sql语句
        $result = $db->query($sql);        
        //取数据
        if($type==1)//如果$type=1        {            $attr = array();            while($a = $result->fetch_assoc())//每次返回一条关联数组,要把它拼成二维数组。            {                $attr[]=$a;//把取到的$a放到数组里面            }            return $attr;//返回二维的关联数组        }        else
        {            return $result;//如果$type不等于1,返回$result。        }
    }
}

 

第2步:将文件引用到页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档</title></head><body>

<?phpinclude("DBDA.class.php");//将封装的类引入此页面$db = new DBDA();//新建一个对象$sql = "select * from info";var_dump($db->GuanQuery($sql));//第2个参数不写的话就是查询,因为默认值是1.
//$sql = "update info set name='杨宁波' where code='p001'";
//var_dump($db->Query($sql,0));?>

 

</body></html>

 

让输出结果为字符串

第1步:封装类

<?phpclass DBDA
{    public $host="localhost";    public $uid="root";    public $pwd="666";    public $dbname="text1";    
    /**
    *给一个sql语句,返回执行的结果
    *@param string $sql 用户指定的sql语句
    *@param int $type 用户给的语句类型,0代表增删改,1代表查询
    *@return  返回查询的结果,如果是查询返回二维数组,如果是增删改返回true或false 
    */
    function Query($sql,$type=1)
    {        //造连接对象
        $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname);        
        //执行sql语句
        $reslut = $db->query($sql);        
        //从结果集对象里面取数据
        if($type==1)
        {            return $reslut->fetch_all();
        }        else
        {            return $reslut;
        }
    }    
    /**
    *给一个sql语句,返回关联的二维数组
    *@param string $sql 用户指定的sql语句
    *@param int $type 用户给的语句类型,0代表增删改,1代表查询
    *@return  返回查询的结果,如果是查询返回二维数组,如果是增删改返回true或false 
    */
    function GuanQuery($sql,$type=1)
    {        //造连接对象
        $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname);        
        //执行sql语句
        $reslut = $db->query($sql);        
        //取数据
        if($type==1)
        {            $attr = array();            while($a = $reslut->fetch_assoc())
            {                $attr[] = $a;
            }            
            return $attr;    
        }        else
        {            return $reslut;
        }
    }    /**
    *给一个sql语句,返回字符串
    *@param string $sql 用户指定的sql语句
    *@param int $type 用户给的语句类型,0代表增删改,1代表查询
    *@return  返回查询的结果,如果是查询返回字符串,如果是增删改返回true或false 
    */
    function StrQuery($sql,$type=1)
    {        //造连接对象
        $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname);        
        //执行sql语句
        $reslut = $db->query($sql);        
        //取数据
        if($type==1)
        {            $attr = $reslut->fetch_all();            $str="";            foreach($attr as $v)
            {                $str .= implode("^",$v);                $str .="|";
            }            return substr($str,0,strlen($str)-1);
        }        else
        {            return $reslut;
        }
    }
}

 

第2步:引用类

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档</title></head><body>

<?phpinclude("DBDA.class.php");//将封装的类引入此页面$db = new DBDA();//新建一个对象$sql = "select * from info";var_dump($db->StrQuery($sql));//第2个参数不写的话就是查询,因为默认值是1.
//$sql = "update info set name='杨宁波' where code='p001'";
//var_dump($db->Query($sql,0));

//一个字符串里面包含查到的所有的数据?>

</body></html>

 

二、如果需要用到的分页较多,学习完ajax以后可以尝试自己写。现在使用下面的工具类做分页,写的比较复杂,但是用起来非常简单。代码如下:

<?php    /**
        file: page.class.php 
        完美分页类 Page 
    */
    class Page {        private $total;                            //数据表中总记录数
        private $listRows;                         //每页显示行数
        private $limit;                            //SQL语句使用limit从句,限制获取记录个数
        private $uri;                              //自动获取url的请求地址
        private $pageNum;                          //总页数
        private $page;                            //当前页    
        private $config = array(                &#39;head&#39; => "条记录", 
                'prev' => "上一页", 
                'next' => "下一页", 
                'first'=> "首页", 
                'last' => "末页"
            );                     
        //在分页信息中显示内容,可以自己通过set()方法设置
        private $listNum = 10;                     //默认分页列表显示的个数

        /**
            构造方法,可以设置分页类的属性
            @param    int    $total        计算分页的总记录数
            @param    int    $listRows    可选的,设置每页需要显示的记录数,默认为25条
            @param    mixed    $query    可选的,为向目标页面传递参数,可以是数组,也可以是查询字符串格式
            @param     bool    $ord    可选的,默认值为true, 页面从第一页开始显示,false则为最后一页         */
        public function __construct($total, $listRows=25, $query="", $ord=true){            $this->total = $total;            $this->listRows = $listRows;            $this->uri = $this->getUri($query);            $this->pageNum = ceil($this->total / $this->listRows);            /*以下判断用来设置当前面*/
            if(!empty($_GET["page"])) {                $page = $_GET["page"];
            }else{                if($ord)                    $page = 1;                else
                    $page = $this->pageNum;
            }            if($total > 0) {                if(preg_match('/\D/', $page) ){                    $this->page = 1;
                }else{                    $this->page = $page;
                }
            }else{                $this->page = 0;
            }            
            $this->limit = "LIMIT ".$this->setLimit();
        }        /**
            用于设置显示分页的信息,可以进行连贯操作
            @param    string    $param    是成员属性数组config的下标
            @param    string    $value    用于设置config下标对应的元素值
            @return    object            返回本对象自己$this, 用于连惯操作         */
        function set($param, $value){            if(array_key_exists($param, $this->config)){                $this->config[$param] = $value;
            }            return $this;
        }        
        /* 不是直接去调用,通过该方法,可以使用在对象外部直接获取私有成员属性limit和page的值 */
        function __get($args){            if($args == "limit" || $args == "page")                return $this->$args;            else
                return null;
        }        
        /**
            按指定的格式输出分页
            @param    int    0-7的数字分别作为参数,用于自定义输出分页结构和调整结构的顺序,默认输出全部结构
            @return    string    分页信息内容         */
        function fpage(){            $arr = func_get_args();            $html[0] = "<span class=&#39;p1&#39;> 共<b> {$this->total} </b>{$this->config["head"]} </span>";            $html[1] = " 本页 <b>".$this->disnum()."</b> 条 ";            $html[2] = " 本页从 <b>{$this->start()}-{$this->end()}</b> 条 ";            $html[3] = " <b>{$this->page}/{$this->pageNum}</b>页 ";            $html[4] = $this->firstprev();            $html[5] = $this->pageList();            $html[6] = $this->nextlast();            $html[7] = $this->goPage();            
            $fpage = '<p style="font:12px \&#39;\5B8B\4F53\&#39;,san-serif;">';            if(count($arr) < 1)                $arr = array(0, 1,2,3,4,5,6,7);            
            for($i = 0; $i < count($arr); $i++)                $fpage .= $html[$arr[$i]];        
            $fpage .= &#39;</p>';            return $fpage;
        }        
        /* 在对象内部使用的私有方法,*/
        private function setLimit(){            if($this->page > 0)                return ($this->page-1)*$this->listRows.", {$this->listRows}";            else
                return 0;
        }        /* 在对象内部使用的私有方法,用于自动获取访问的当前URL */
        private function getUri($query){    
            $request_uri = $_SERVER["REQUEST_URI"];    
            $url = strstr($request_uri,'?') ? $request_uri :  $request_uri.'?';            
            if(is_array($query))                $url .= http_build_query($query);            else if($query != "")                $url .= "&".trim($query, "?&");        
            $arr = parse_url($url);            if(isset($arr["query"])){                parse_str($arr["query"], $arrs);                unset($arrs["page"]);                $url = $arr["path"].'?'.http_build_query($arrs);
            }            
            if(strstr($url, '?')) {                if(substr($url, -1)!='?')                    $url = $url.'&';
            }else{                $url = $url.'?';
            }            
            return $url;
        }        /* 在对象内部使用的私有方法,用于获取当前页开始的记录数 */
        private function start(){            if($this->total == 0)                return 0;            else
                return ($this->page-1) * $this->listRows+1;
        }        /* 在对象内部使用的私有方法,用于获取当前页结束的记录数 */
        private function end(){            return min($this->page * $this->listRows, $this->total);
        }        /* 在对象内部使用的私有方法,用于获取上一页和首页的操作信息 */
        private function firstprev(){            if($this->page > 1) {                $str = " <a href=&#39;{$this->uri}page=1'>{$this->config["first"]}</a> ";                $str .= "<a href=&#39;{$this->uri}page=".($this->page-1)."'>{$this->config["prev"]}</a> ";        
                return $str;
            }

        }    
        /* 在对象内部使用的私有方法,用于获取页数列表信息 */
        private function pageList(){            $linkPage = " <b>";            
            $inum = floor($this->listNum/2);            /*当前页前面的列表 */
            for($i = $inum; $i >= 1; $i--){                $page = $this->page-$i;                if($page >= 1)                    $linkPage .= "<a href=&#39;{$this->uri}page={$page}'>{$page}</a> ";
            }            /*当前页的信息 */
            if($this->pageNum > 1)                $linkPage .= "<span style=&#39;padding:1px 2px;background:#BBB;color:white&#39;>{$this->page}</span> ";            
            /*当前页后面的列表 */
            for($i=1; $i <= $inum; $i++){                $page = $this->page+$i;                if($page <= $this->pageNum)                    $linkPage .= "<a href=&#39;{$this->uri}page={$page}'>{$page}</a> ";                else
                    break;
            }            $linkPage .= '</b>';            return $linkPage;
        }        /* 在对象内部使用的私有方法,获取下一页和尾页的操作信息 */
        private function nextlast(){            if($this->page != $this->pageNum) {                $str = " <a href=&#39;{$this->uri}page=".($this->page+1)."'>{$this->config["next"]}</a> ";                $str .= " <a href=&#39;{$this->uri}page=".($this->pageNum)."'>{$this->config["last"]}</a> ";                return $str;
            }
        }        /* 在对象内部使用的私有方法,用于显示和处理表单跳转页面 */
        private function goPage(){                if($this->pageNum > 1) {                return ' <input style="width:20px;height:17px !important;height:18px;border:1px solid #CCCCCC;" type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'page=\'+page+\'\'}" value="'.$this->page.'"><input style="cursor:pointer;width:25px;height:18px;border:1px solid #CCCCCC;" type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'page=\'+page+\'\'"> ';
            }
        }        /* 在对象内部使用的私有方法,用于获取本页显示的记录条数 */
        private function disnum(){            if($this->total > 0){                return $this->end()-$this->start()+1;
            }else{                return 0;
            }
        }
    }

 

 

下面用上面的分页类做一个简单的例子

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档</title></head><body>

<?phpinclude("DBDA.class.php");$db = new DBDA();include("page.class.php");//引入分页类$sz = "select count(*) from chinastates";//查询总数$zts = $db->StrQuery($sz);//造分页类对象$page = new Page($zts,20);//每页20条数据。$sql = "select * from chinastates ".$page->limit;//分页查询,.$page->limit查看page.class.php里面。
 = ->Query( "<table width=&#39;100%&#39; border=&#39;1&#39; cellpadding=&#39;0&#39; cellspacing=&#39;0&#39;>"(   "<tr><td>{[0]}</td><td>{[1]}</td><td>{[2]}</td></tr>" "</table>" ->fpage(); 

?>

 

</body></html>

 

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中