亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 49
粉絲 0
評論 0
訪問量 49510
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
php單例模式處理數(shù)據(jù)庫增刪改查初體驗(yàn)
超超多喝水
原創(chuàng)
806人瀏覽過

通過單例模式鏈接數(shù)據(jù)庫,保證實(shí)例化只發(fā)生一次,可以減輕服務(wù)器負(fù)載。

實(shí)例

<?php

//單例模式鏈接數(shù)據(jù)

interface iDbBase
{
    //數(shù)據(jù)庫操作 curd
    static function insert($db,$data);
    static function select($db,$where=[]);
    static function delete($db,$where=[]);
    static function update($db,$data,$where=[]);
    static function doConnect($dsn,$username,$password);

}

abstract class aDb implements iDbBase
{
    //創(chuàng)建類的唯一實(shí)例 pdo對象
    private static $_instance;

    //阻止此類在外部實(shí)例化
    private function __construct()
    {
    }
    // 阻止此類在外部克隆
    private function __clone()
    {
    }
    //聲明連接數(shù)據(jù)庫的靜態(tài)方法
    static function doConnect($dsn,$username,$password)
    {
            //判斷是否已實(shí)例化,未實(shí)例化進(jìn)行實(shí)例化,否則返回實(shí)例
        if(is_null(self::$_instance))
        {
        //得到PDO連接對象 儲存在$_instance
        self::$_instance = new PDO($dsn,$username,$password);//抽象類不能被實(shí)例化 這里可以實(shí)例化系統(tǒng)類PDO
        }
        return self::$_instance;
    }
}
//工作類
class Db extends aDb
{
    //數(shù)據(jù)庫操作 增加插入
    static function insert($db,$data)
    {
            //創(chuàng)建兩個空字符串存儲數(shù)據(jù)
        $str1 = '';
        $str2 = '';
        //遍歷數(shù)據(jù)數(shù)組,并拼接為sql語句識別的部分內(nèi)容
        foreach($data as $k=>$v)
        {
                //進(jìn)一步判斷$data是否是數(shù)組,如果是則執(zhí)行拼接
                if(is_array($data))
                        {
                $str1 .= "`".$k."`,";
                $str2 .= "'".$v."',";
             }
        }
        //去掉最后一位產(chǎn)生的","
        $str1 = substr($str1,0,strlen($str1)-1);
        $str2 = substr($str2,0,strlen($str2)-1);
        //使用PDO::exec()執(zhí)行sql語句并返回影響行數(shù),并在內(nèi)部對sql語句進(jìn)行正確拼接
        return $db->exec("INSERT INTO `id_list` ($str1) VALUES ($str2)");
    }
    //數(shù)據(jù)庫操作 查詢
    static function select($db,$where=['id'=>1,'age'=>18])
    {
            //聲明一個空字符串
        $str = '';
        //遍歷查詢數(shù)組,并拼接為sql語句識別的部分內(nèi)容
        foreach($where as $k=>$v)
        {
                //進(jìn)一步判斷$where是否是數(shù)組,如果是則執(zhí)行拼接
            if(is_array($where))
            {
                    //判斷$where是否只有多對數(shù)組,如果有末尾加上"and",否則不加
                if(count($where)>1)
                {
                    $str .= $k . ' = ' . $v . ' and ';
                }else{
                    $str .= $k . ' = ' . $v;
                    }
            }
        }
        //判斷$where是否只有多對數(shù)組,如果是則對上面處理的拼接做進(jìn)一步處理,將末尾多出的and去掉
        if(count($where)>1)
        {
            $str = substr($str,0,strlen($str)-4);
        }
        //query方法 fetchALL(PDO::FETCH_ASSOC)取關(guān)聯(lián)數(shù)組 以取結(jié)果集的形式去取
        return $db->query("SELECT `id`,`username`,`password` FROM `id_list` WHERE $str")->fetchALL(PDO::FETCH_ASSOC);
    }
    //數(shù)據(jù)庫操作 刪除
    static function delete($db,$where=['id'=>2])
    {
                //聲明一個空字符串
        $str = '';
        //遍歷查詢數(shù)組,并拼接為sql語句識別的部分內(nèi)容
        foreach($where as $k=>$v)
        {
                //進(jìn)一步判斷$where是否是數(shù)組,如果是則執(zhí)行拼接
            if(is_array($where))
            {
                    //判斷$where是否只有多對數(shù)組,如果有末尾加上"and",否則不加
                if(count($where)>1)
                {
                    $str .= $k . ' = ' . $v . ' and ';
                }else{
                    $str .= $k . ' = ' . $v;
                    }
            }
        }
        //判斷$where是否只有多對數(shù)組,如果是則對上面處理的拼接做進(jìn)一步處理,將末尾多出的and去掉
        if(count($where)>1)
        {
            $str = substr($str,0,strlen($str)-4);
        }
        //使用PDO::exec()執(zhí)行sql語句并返回影響行數(shù),并在內(nèi)部對sql語句進(jìn)行正確拼接
        return $db->exec("DELETE FROM `id_list` WHERE `id_list`.$str");
    }
    //數(shù)據(jù)庫操作 修改數(shù)據(jù)庫數(shù)據(jù)信息
    static function update($db,$data,$where=['id'=>6])
    {
                //創(chuàng)建兩個空字符串存儲數(shù)據(jù)
        $str = '';
        $str1 = '';
        //遍歷數(shù)據(jù)數(shù)組,并拼接為sql語句識別的部分內(nèi)容
        foreach($data as $k=>$v)
        {
                //進(jìn)一步判斷$data是否是數(shù)組,如果是則執(zhí)行拼接
                if(is_array($data))
                {
                     $str1 .= "`".$k."`='".$v."',";
                }
            
        }
        //去掉最后一位產(chǎn)生的","
        $str1 = substr($str1,0,strlen($str1)-1);
        //變量查詢數(shù)組,并拼接為sql語句識別的部分內(nèi)容
        foreach($where as $k=>$v)
        {
                //進(jìn)一步判斷$where是否是數(shù)組,如果是則執(zhí)行拼接
            if(is_array($where))
            {
                    //判斷$where是否只有多對數(shù)組,如果有末尾加上"and",否則不加
                if(count($where)>1)
                {
                    $str .= $k . ' = ' . $v . ' and ';
                }else{
                    $str .= $k . ' = ' . $v;
                    }
            }
        }
        //判斷$where是否只有多對數(shù)組,如果是則對上面處理的拼接做進(jìn)一步處理,將末尾多出的and去掉
        if(count($where)>1)
        {
            $str = substr($str,0,strlen($str)-4);
        }
        //使用PDO::exec()執(zhí)行sql語句并返回影響行數(shù),并在內(nèi)部對sql語句進(jìn)行正確拼接
        return $db->exec("UPDATE `id_list` SET $str1 WHERE `id_list`.$str");
    }

}


//客戶端代碼

$dsn ='mysql:host=localhost;dbname=test';//數(shù)據(jù)庫鏈接信息
$db = Db::doConnect($dsn,'root','');//登錄數(shù)據(jù)庫賬號密碼
// $data = ['id'=>5,'username'=>'admin5','password'=>'admin7890','age'=>16];//新增插入測試數(shù)據(jù)
$data = ['id'=>2,'username'=>'admin2','password'=>'admin456','age'=>18];//修改測試數(shù)據(jù)
// print_r(Db::select($db));//查詢語句執(zhí)行
// echo (Db::insert($db,$data));//插入語句執(zhí)行
// echo (Db::delete($db));//刪除語句執(zhí)行
echo (Db::update($db,$data));//修改更新語句執(zhí)行


運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例


批改老師:PHPzPHPz

批改狀態(tài):合格

老師批語:
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
作者最新博文
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)