1. singleton
singleton中文名称为单例模式,是一种构造类的设计模式。其目的是为了在全局获取这个类的对象时总是能获取到唯一的对象,而不是每次实例化都创建出新的对象的一种类结构。 特别的在DB操作中,DB连接这种对象就必须是通过单例模式来实现的。
<?php
class Singleton{
private static $con = null;
public static function getcon(){
if(!self::$con){
self::$con = new self();
}
return self::$con;
}
}
?>
2. PDO与DB
描述:PDO即PHP数据对象 (PHP Data Object)。
PDO可被视为是一个工具,而这个工具为PHP访问数据库定义了一个轻量级的一致接口。
实现PDO接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。
语法:$pdo = new PDO("DB名:host=主机名;dbname=DB名","DB账号","DB密码");
注意:
(1)利用PDO扩展自身并不能实现任何数据库功能,
必须使用一个具体数据库的PDO驱动来访问数据库服务。
(2)PDO提供了一个【数据访问】抽象层,这意味着不管使用哪种数据库,
都可以用相同的函数(方法)来查询和获取数据。
(3)PDO不提供数据库抽象层,它不会重写 SQL,也不会模拟缺失的特性。
如果需要的话,应该使用一个成熟的抽象层。
(4)从PHP 5.1开始附带了PDO,在 PHP 5.0 中是作为一个PECL扩展使用。
PDO需要PHP 5核心的新特性,因此不能在较早版本的 PHP 上运行。
补充:
<?php
try{
$pdo = new PDO("mysql:host=localhost;dbname=frankdb","root","");
}catch(PDOException $e){
echo "错误";
echo $e->getMessage();
}
?>
3. singleton获取PDO
在说这节课内容之前,我们先来确定一下各位对于singleton和PDO这两者本身都已经掌握到一定程度,换句话说相信我们都能够独立的写出singleton和获取PDO的代码.
4. PDO实现DB增删改查
<?php
require_once "PDOSingleton.php";
$pdo = PDOSingleton::getpdo(); //通过单例方法获取全局pdo单例对象
$pdo->exec(‘set names utf8’); //exec()方法是pdo对象的执行方法,
相当于php中的query()方法.
$sql = "insert into friendslist values('炒鸡大美女',222,222,2000001)";
//…
if($pdo->exec($sql)){ //通过pdo执行db操作
echo "success";
}else{
echo "error";
}
?>
5. PDO异常处理Exception
异常处理Exception是指在try…catch时发生异常时的处理手段,通常异常处理都是直接抛出提醒即可。而设置提醒的手段有三种设置方式:
(1)默认模式
主要依赖于系统提供的errorCode和errorInfo属性实现
(2)警报模式:
为pdo设置setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
(3)中断模式:
为pdo设置setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXEPTION);
6. PDO预处理prepare
预处理语句prepare是pdo提供的一中db操作方式。其语言逻辑与正常的pdo访问相同。但区别在于prepare语句允许用户在【设置sql语句】与【执行sql语句】之间部分进行参数的注入与提取操作,而不是像正常的pdo访问一样直接将参数写死。
(1)prepare()方法和execute()方法
(2)bindValue()方法
(3)bindColumn()方法
7. PDO事务处理transaction
事务:多个事件组成的结构。
事件:事件实际上就是预处理语句执行的execute语句。
注意:
(1)整个事务操作必须放到try...catch中,这是因为我们并不能保证执行的事件一定成功。
而对于整个事务而言,任何一个事件的失败都会导致catch的触发。
而catch触发就意味着必须将之前做出的所有的操作都必须还原
回滚操作:$pdo->rollBack()
(2)操作语句必须在事务开启之后执行,在事务提交之前停止.
开启事务:$pdo->beginTransaction();
关闭事务:$pdo->commit();
(3)中文处理方案(避免乱码):
读取:$pdo ->query("set names utf8");
插入:$pdo ->exec('set names utf8');