mvc模式下的数据库链接操做

mvc模式下数据库操做分为三部分,举一个容易理解的例子,mvc就是一种设计模式,php

分为模型(Model),控制器(Controller ),视图(View),各自分工明确,链接数据库操做也听从于这种模式mysql

一部分是用来设置数据库的的用户名和密码的文件,可同时设置多个数据库的信息,实现可扩展性,sql

一部分是链接数据库,实例化类的操做,数据库

一部分是用来调用实例化后的对象中的方法,写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中,此文件主要用来链接数据库,不作其余任何操做mvc

<?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语句fetch

<?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 ();
}
}
相关文章
相关标签/搜索