一、单例(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");