PHP之面向对象以及PDO连接数据库
PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。
PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。
单例模式,说白了就是说一个类只能实例化一次。
目的就是为了防止产生多个实例化对象
第一次产生后放到类的一个静态变量中,下次再实例化就直接返回这个静态变量
<?php
//定义接口
interface cdbBase
{
// 数据表增删查改
static function insert($db, $data);
static function select($db, $where = []);
static function update($db, $where = []);
static function delete($db, $data, $where = []);
//数据库连接
static function doconnect($dsn, $user, $password);
}
// 单例模式连接数据库
abstract class adb implements cdbBase
{
//定义静态属性存储pdo唯一实例
private static $_instance;
//阻止外部实例化
private function __construct()
{
}
private function __clone()
{
}
// 创建adb类的唯一实例 获取唯一的pdo对象
static function doconnect($dsn, $user, $password)
{
if (is_null(self::$_instance)) {
self::$_instance = new pdo($dsn, $user, $password);
}
echo "连接成功<hr>";
return self::$_instance;
}
}
//工作类,具体实现
class DB extends adb
{
// 数据库连接curd
static function insert($db, $data = [])
{
$sql = "INSERT INTO `test` VALUES ('13','123456')";
$doinsert = $db->exec($sql);
if($doinsert){
echo "添加成功<br>";
}else{
echo "添加失败<br>";
}
return $doinsert;
}
static function select($db, $where = [])
{
$doselect = $db->query('SELECT * FROM `test` LIMIT 7;')->fetchAll(PDO::FETCH_ASSOC);
if($doselect){
echo "选择数据成功:<br>";
}else{
echo "选择数据失败:<br>";
}
return $doselect;
}
static function update($db, $where = [])
{
$doupdate = $db->exec("UPDATE `test` SET `name` = '大萨dsa达撒' WHERE `test`.`id` = 1");
if($doupdate){
echo "更新成功<br>";
}else{
echo "更新失败<br>";
}
return $doupdate;
}
static function delete($db, $data = [], $where = [])
{
$doupdate = $db->exec("DELETE FROM `test` WHERE `test`.`id` = 1");
if($doupdate){
echo "删除成功<br>";
}else{
echo "删除失败<br>";
}
return $doupdate;
}
}
//客户端代码,参数
$config = [
'type' => $type ?? 'mysql',
'host' => $host ?? 'localhost',
'dbname' => $dbname ?? 'userinfo',
'username' => $username ?? 'root',
'password' => $password ?? '',
'port' => $port ?? '3306',
'charset' => $charset ?? 'utf8'
];
extract($config);
$dsn = sprintf('%s:host=%s;port=%s;charset=%s;dbname=%s', $type, $host, $port, $charset, $dbname);
$pdo = DB::doconnect($dsn, $username, $password);
var_dump(DB::select($pdo));
echo "<hr>";
var_dump(DB::insert($pdo));
echo "<hr>";
var_dump(DB::delete($pdo));
echo "<hr>";
var_dump(DB::update($pdo));