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
();
}
}