一、抽象类实现接口,iDbBase定义一个数据库的CURD接口
interface iDbBase
{
// 新增
public static function insert($db, $data);
// 查询
public static function select($db, $optoins = []);
// 更新
public static function update($db, $optoins);
// 删除
public static function delete($db, $where);
}
二、实现类改为抽象类 abstract
abstract class aDb implements iDbBase
{
// 使用单例模式连接:创建类的唯一实例,唯一对象
protected static $db = null;
// 实现类中的方法中有公共操作,放在中间的抽象类中实现它
public static function connect($dns, $username, $password)
{
if (is_null(self::$db)) {
// 如果是null 表示未连接
self::$db = new PDO($dns, $username, $password);
}
// 如果连接成功就返回
return self::$db;
}
}
三、创建一个真正实现类,在这个类进行(增删改查)操作,users是数据库中的一张表
class DB extends aDb
{
// 新增一条
public static function insert($db, $data)
{
$stmt = $db->prepare('INSERT `users` SET `name`=?, `email`=? , `password`=?;');
$stmt->execute(['Micki', '111@php.cn', sha1('micki123')]);
return "受影响的记录有" . $stmt->rowCount() . "条";
}
// 更新id为8的数据
public static function update($db, $optoins)
{
$stmt = $db->prepare('UPDATE `users` SET `name`=?, `email`= ?, `password`=? WHERE `id` = ?;');
$stmt->execute(['Melinda', '222@php.cn', sha1('melinda123'), 8]);
return "受影响的记录有" . $stmt->rowCount() . "条";
}
// 删除id是6的数据
public static function delete($db, $where)
{
$stmt = $db->prepare('DELETE FROM `users` WHERE `id` = ?;');
$stmt->execute([6]);
return "受影响的记录有" . $stmt->rowCount() . "条";
}
// 查询所有数据
public static function select($db, $optoins = [])
{
return $db->query('SELECT * FROM `users`')->fetchALL(PDO::FETCH_ASSOC);
}
}
原数据库与操作后的相比,实现了增删改查数据,如下图:
四、连接参数,把config.php这个文档的数据库的参数拿来、配置、调用
$config = [
// 类型
'type' => $type ?? 'mysql',
// 默认数据库主机名(IP)
'host' => $host ?? 'localhost',
// 默认数据库名
'dbname' => $type ?? 'phpedu',
// 默认字符编码集
'charset' => $type ?? 'utf8',
// 默认端口号
'port' => $type ?? '3306',
// 默认用户名
'username' => $username ?? 'root',
// 默认用户的密码
'password' => $password ?? 'melinda123'
];
// 做配置
$dsn = sprintf('%s:host=%s;dbname=%s;', $config['type'], $config['host'], $config['dbname']);
$username = $config['username'];
$password = $config['password'];
// 调用
$db = DB::connect($dsn, $username, $password);
五、打印输出
// 1.新增
// echo DB::insert($db, $data);
// 2.修改
// echo DB::update($db, $optoins);
// 3.删除
// echo DB::delete($db, $where);
// 4.查询
// 调用实现类DB中 select()查询,由于是二维数组,要遍历
foreach (DB::select($db) as $user) {
print_r($user);
}