mvc模式下的數據庫連接操作


mvc模式下數據庫操作分為三部分,舉一個容易理解的例子,mvc就是一種設計模式,

分為模型(Model),控制器(Controller ),視圖(View),各自分工明確,連接數據庫操作也遵從於這種模式

一部分是用來設置數據庫的的用戶名和密碼的文件,可同時設置多個數據庫的信息,實現可擴展性,

一部分是連接數據庫,實例化類的操作,

一部分是用來調用實例化后的對象中的方法,寫sql語句部分,分為了三個文件

在config.php文件中,設置常量define關於數據庫信息,此處可以設置為二維數組,實現連接多個數據庫的操作

<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PWD', 'root');
define('DB_NAME', 'dml');
define('DB_CHARSET','utf8');

將config.php引入到db.php中,此文件主要用來連接數據庫,不做其他任何操作

<?php
require_once __DIR__."/../config.php";
class Db
{
    // 設置靜態變量存儲實例對象
    private static $db = null;
    // 設置數據庫對象
    private static $conn = null;

    private $dbConfig = [
        'host' => DB_HOST,
        'user' => DB_USER,
        'pwd' => DB_PWD,
        'dbname' => DB_NAME,
        'charset' => DB_CHARSET
    ];
    // 影響數據的行數
    public $rowNum;

    // 影響數據當前的id值
    public $inserId;

    private function __construct(array $param)
    {
        // 后者覆蓋當前的數據庫
        $this->dbConfig=array_merge($this->dbConfig,$param);
        $this->conn();
    }
    // 禁止克隆
    private function __clone()
    { }
    // 連接數據庫
    private function conn()
    {
        self::$conn = new mysqli(
            $this->dbConfig['host'],
            $this->dbConfig['user'],
            $this->dbConfig['pwd'],
            $this->dbConfig['dbname']
        );
        if (self::$conn->connect_errno) {
            die("數據庫連接失敗" . self::$conn->connect_error);
        }
        // 字符集操作放在后面
        self::$conn->set_charset($this->dbConfig['charset']);
    }


    // 獲取類的實例
    public static function getDb(array $param = [])
    {
        if (!self::$db instanceof self) {
            self::$db = new self($param);
        }
        return self::$db;
    }


    //  增刪改方法,判斷數執行是否成功,得到影響的行數和返回當前行的id
    public function exec($sql)
    {
直接執行sql操作,通過判斷影響數據庫的行數和id是否大於0,來判斷是否成功 self::$conn
->query($sql); if (self::$conn->affected_rows > 0) { $this->rowNum = self::$conn->affected_rows; if (self::$conn->insert_id > 0) { $this->inserId = self::$conn->insert_id; } else { echo "執行數據庫失敗" . self::$conn->connect_error; } } } // 查詢單條數據 public function fetch($sql) { return self::$conn->query($sql)->fetch_assoc(); } // 查詢多條數據庫內容 public function fetchall($sql) { return self::$conn->query($sql)->fetch_all(MYSQLI_ASSOC); } // 關閉數據庫,可以不寫 public function __destruct() { self::$conn->close(); } }

 

在operation.php文件中,實現我們在db類中定義的方法,建立sql語句

<?php
require_once "db.php";
// 調用getDb方法,將對象賦值給變量a
$a=db::getDb();
// var_dump($a);
// 查詢單行的數據
// $sql="SELECT * FROM user";
// var_dump($a->fetch($sql));
// 查詢多行的數據
// var_dump($a->fetchall($sql));
// 執行插入數據的操作
// $sql="INSERT `user` (`name`,`password`) VALUES ('山東省',123456)";
// var_dump($a->exec($sql));

 

<?php
require_once __DIR__ . "/../config.php" ;
class Db
{
// 設置靜態變量存儲實例對象
private static $db = null ;
// 設置數據庫對象
private static $conn = null ;

private $dbConfig = [
'host' => DB_HOST,
'user' => DB_USER,
'pwd' => DB_PWD,
'dbname' => DB_NAME,
'charset' => DB_CHARSET
];
// 影響數據的行數
public $rowNum ;

// 影響數據當前的id值
public $inserId ;

private function __construct ( array $param )
{
// 后者覆蓋當前的數據庫
$this -> dbConfig = array_merge ( $this -> dbConfig , $param );
$this -> conn ();
}
// 禁止克隆
private function __clone ()
{ }
// 連接數據庫
private function conn ()
{
self :: $conn = new mysqli (
$this -> dbConfig [ 'host' ],
$this -> dbConfig [ 'user' ],
$this -> dbConfig [ 'pwd' ],
$this -> dbConfig [ 'dbname' ]
);
if ( self :: $conn -> connect_errno ) {
die ( "數據庫連接失敗" . self :: $conn -> connect_error );
}
// 字符集操作放在后面
self :: $conn -> set_charset ( $this -> dbConfig [ 'charset' ]);
}


// 獲取類的實例
public static function getDb ( array $param = [])
{
if (! self :: $db instanceof self ) {
self :: $db = new self ( $param );
}
return self :: $db ;
}


// 增刪改方法,判斷數執行是否成功,得到影響的行數和返回當前行的id
public function exec ( $sql )
{
self :: $conn -> query ( $sql );
if ( self :: $conn -> affected_rows > 0 ) {
$this -> rowNum = self :: $conn -> affected_rows ;
if ( self :: $conn -> insert_id > 0 ) {
$this -> inserId = self :: $conn -> insert_id ;
} else {
echo "執行數據庫失敗" . self :: $conn -> connect_error ;
}
}
}
// 查詢單條數據
public function fetch ( $sql )
{
return self :: $conn -> query ( $sql )-> fetch_assoc ();
}
// 查詢多條數據庫內容
public function fetchall ( $sql )
{
return self :: $conn -> query ( $sql )-> fetch_all (MYSQLI_ASSOC);
}
// 關閉數據庫
public function __destruct ()
{
self :: $conn -> close ();
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM