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
{
// 设置静态变量存储实例对象
privatestatic$db = null;
// 设置数据库对象
privatestatic$conn = null;
private$dbConfig = [
'host' => DB_HOST,
'user' => DB_USER,
'pwd' => DB_PWD,
'dbname' => DB_NAME,
'charset' => DB_CHARSET
]
;
// 影响数据的⾏数
public$rowNum;
// 影响数据当前的id值
public$inserId;
privatefunction__construct(array$param)
{
// 后者覆盖当前的数据库
$this->dbConfig=array_merge($this->dbConfig,$param); $this->conn();
}
// 禁⽌克隆
privatefunction__clone()
{ }
// 连接数据库
privatefunction 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']);
}
// 获取类的实例
publicstaticfunction getDb(array$param = [])
{
if (!self::$db instanceof self) {
self::$db = newself($param);
}
return self::$db;
}
// 增删改⽅法,判断数执⾏是否成功,得到影响的⾏数和返回当前⾏的id publicfunction 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;
}
}
}
// 查询单条数据
publicfunction fetch($sql)
{
return self::$conn->query($sql)->fetch_assoc();
}
// 查询多条数据库内容
publicfunction fetchall($sql)
{
return self::$conn->query($sql)->fetch_all(MYSQLI_ASSOC);
}
// 关闭数据库
publicfunction__destruct()
mvc实例{
self::$conn->close();
} }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论