一、单例(single)
在全局下总能获得唯一的对象,而不是每次实例化都创建出来新的对象
举例:
class single{
private static $con=null;
public static function getCon() {
if(self::$con==null){
self::$con=mysql_connect("localhost","root","","librarydb");
}
return self::$con;
}
}
二、PDO(PHP Data Object)
用来帮助用户管理操作数据库的工具
$pdo=new PDO('mysql:host=localhost;dbname=librarydb','root','');
$pdo对象在页面中为不可见内容,只能用创建成功或者失败来判断,无法直接获得内部属性和属性值
注意:在连接数据库的时候,并不是每一次的连接都可以保证成功,因此我们必须设置一个“保险”,这个东西就是try...catch
try{
$pdo=new PDO("mysql:host=localhost;dbname=librarydb","root",""); //可能会出现异常的代码
}catch(Exception $e){
echo '错误';
echo $e->getmessage();
}
三、single获取PDO
class singlePdo{
private static $pdo=null;
public static function getPdo (){
if(self::$pdo==null){
try{
self::$pdo=new PDO("mysql:host=localhost;dbname=librarydb","root","");
}catch(Exception $e){
echo "错误";
echo $e->getmessage();
}
}
return self::$pdo;
}
}
四、PDO实现增删改查
class singlePdo{
private static $pdo=null;
public static function getPdo (){
if (self::$pdo==null){
try{
self::$pdo=new PDO("mysql:host=localhost;dbname=librarydb","root","");
}catch(Exception $e){
echo "错误";
echo $e->getmessage();
}
}
return self::$pdo;
}
}
$pdo=singlePdo::getPdo();
$pdo->exec('set names utf8');
$pdo->exec('set character_set_client=utf8');
$pdo->exec('set character_set_results=utf8');
// $sql="insert into book values ('4','haha','haha','50','50')"; //添加
// $sql="delete from book where bookName='haha' "; //删除
$sql="update book set bookId='7' where bookName='5' "; //修改
$result=$pdo->exec($sql);
if($result){
echo '修改成功';
}else{
echo $pdo->errorCode();
echo $pdo->errorInfo();
}
也可以把单例封装成一个php文件直接引入
require_once '文件地址';
五、PDO异常处理(Exception)
1、默认模式:主要依赖于系统提供的errorCode和errorInto属性实现
2、警报模式:为PDO 设置setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARING);
3、中断模式:为PDO设置setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXEPTION);
举例:
try{
$pdo=new PDO("mysql:host=localhost;dbname=librarydb","root","");
}catch(Exception $e){
echo $e->getmessage();
}
$sql="insert into book values("实参1","2","3","4","5")";
$result=$pdo->exec($sql);
if($result){
echo 'ok';
}else{
echo $pdo->errorCode();
echo $pdo->errorInfo();
}
六、PDO预处理
在sql语句执行之前,对sql语句执行简短操作
1、perpare()和execute()
perpare()方法:表示预先处理,用来处理半成品sql语句
execute()方法:提供给预处理结果使用,用来执行并获得最终结果
注意:perpare方法只能处理半成品语句,如果是成品,需要用exec调用
execute方法只能用半成品调用,目的是为了给半成品传参
语法:
$sql="insert into book values(?,?,?,?,?)";
$pdoso=$pdo->perpare($sql);
$pdoso->execute(array("1","2","3","4","5"));
2、bindColumn()方法
将execute方法执行的结果中的某一列数据,绑定到一个变量之上
语法:
$pdoso=$pdo->execute();
$pdoso->bindColumn(index,$变量名);
3、bindValue()方法
为了给半成品传递参数
语法:
$pdoso->bindValue(index,value);
七、PDO事务处理 transaction
因为并不能保证每次都成功,所以整个事物操作必须放在try...catch中
catch触发就意味着必须将之前的所有操作还原 回滚操作:$pdo->rollBack();
操作必须在事务开启之后执行,在事务提交之前停止
开启事务:$pdo->beginTransaction();
关闭事务:$pdo->commit();
中文处理方案(避免乱码):
读取:$pdo->query("set names utf8");
插入:$pdo->exec("set names utf8");