1.单例模式
单例模式是一种设计类结构的固有写法,能够保证类在全局有且仅有唯一的一个实例对象。
<?php
echo"<pre>";
class richestMan{
private static $richestPeople=null;
public static function findRichestMan(){
if(self::$richestPeople==null){
self::$richestPeople=new self();
}
return self::$richestPeople:
}
}
$richman1=richestMan::findRichestMan();
$richman2=richesMan:;findRichestMna();
var_dump($richman1);
echo"<br/>";
var_dump($richman2);
echo "<br/>";
//$con例子
class singletonCon{
private static $con =null;
public static function getCon(){
if (self::$con==null){
self::$con=mysqli_connect("localhost" ,"root","");
}
return self::$con;
}
}
$con =singletonCon::getCon();
var_dump($con);
2.pdo(php data object)
$pod=new PDO("mysql:host=localhost ; dbname=stud ","root","");
try chath
描述:因为pdo并不能保证每一次的连接都是成功的。所以在db连接的时候需要添加一个保险操作
这就是异常捕获【try...catch】机制
语法:try{
//你觉得有可能出现异常问题的代码
}catch(PDOException $err){
echo '出现错误';
echo $err->getMessage();
}
说明:try中的代码如果没有发生异常错误,那么catch中的内容等价于不存在
而如果try中的代码真的发生了异常,那么程序会立即执行catch中的内容
而不至于在try中的异常位置卡死。
try {
$pdo = new PDO("mysql:host=localhost;dbname=studbd","root","");
} catch (Exception $e) {
echo '出现错误'."<br/>";
echo $e->getMessage();
}
// print_r($pdo);
(1).设计一个单例pdo类,保证在全局中获取pdo对象的时候
永远都只获取唯一的一个pdo,而不会每次获取pdo都重新链接一次数据库。
(2)设计一个单例编写单例类,并通过require或require_once来进行引入
保证全局中代码只需要编写一份,不用重复书写。
<?php
echo"<pre>";
class singletonPDO{
private static $pdo=null;
public static function getPdo(){
if(self::$pdo==null){
try{
self::$pdo=new PDO("mysql:host=localhost; dbname=studb","root","");
} catch (Exception $e){
echo "出现错误:","<br/>";
echo $e->getMessage();
}
}
return self::$pdo;
}
}
//以上相当于这个require_once"singletonPDO.php";
$pdo1=singletonPDO::getPdo();
$pdo2 = singletonPDO::getPdo();
$pdo3 = singletonPDO::getPdo();
print_r($pdo1);
echo "<br/>";
print_r($pdo2);
echo "<br/>";print_r($pdo3);
?>
// $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
// $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
<?php
try{
$pdo =new PDO ("mysql:host=localhost; dbname=studb","root","");
// $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
// $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(Exception $e){
echo"发生错误";
echo $e->get Message();
}
$pdo->exe("set names utf8");
$sql="insert into stud values('zeo','famale','18','12233333','90');
if($pdo->exec($sql)){
echo"添加成功";
}else{
echo $pdo-> errorCode();
}
3.$pdo->exe();
描述:pdo对象的执行法,相当于mysql原生操作中的query()方法。
// echo "<pre>";
// $con = mysqli_connect('localhost','root','','studb');
// if($con){
// mysqli_query($con, 'set names utf8');
// mysqli_query($con, 'set character_set_client=utf8');
// mysqli_query($con, 'set character_set_results=utf8');
// //
// $sql = 'select * from gradeonesheet where 1';
// $result = $con->query($sql);
// print_r($result);
// }
require_once 'singletonPDO.php';
$pdo = singletonPDO::getPdo();
$pdo->exec('set names utf8');
//
// $sql="inert int stud values('joy','male','14','334343434',''99');
//$sql="update stud set stuScore='99' where stuName='joy'";
$sql = "delete from stud where stuName='joy'";
$result=$pdo->exec($sql);
if($result){
echo"删除数据成功";
}else{
echo"删除数据失败";
}
4,.pdo 预处理指令prepare
描述:预处理指令是指用来在sql语句执行之前,对sql语句进行简短操作的指令
其目的是为了更好的让sql 完成任务。
说明:
(1)prepare()方法和execute()方法
(2)bindValue()方法
(3)bindColumn()方法
(1)prepare()方法和execute()方法
prepare()方法表示预先出来,用来处理半成品的sql语句
execute()方法提供给预处理结果使用,用来执行并获得最终的结果
语法: $sql ="insert int stud values(?,?,?,?,?);
$pdoso=$pdo->prepare($sql);
$pdoso->execute(array('实参1',实参2','实参3','实参4','实参5'));
说明:(1)prepare()方法只能处理半成品sql语句,如果sql语句是完整的则不能处理
完整的sql语句需要使用exec()方法执行
(2)execute()方法必须由半成品来调用,其目的是为了给半成品传参,
从而使半成品变成成品。
(3)execute()方法接收数组作为参数,数组内容一般和半成品sql语句中问号格式对应
补充:$pdoso 在执行了execute()方法后会将一些信息存放到自己内部,然而这部分信息不可见
例子:
require_once"singletonPDO.php";
$pdo= singletonPDO::getPdo();
$pdo->exec('set names utf8');
$sql = "insert into gradeonesheet values('polly','male','11','12345678998','80')";
$pdo->exec($sql)
$sql = "insert into gradeonesheet values(?,?,?,?,?)";
$pdoso = $pdo->prepare($sql);
$result = $pdoso->execute(array('polly','male','11','12345678998','80'));
var_dump($result);
5.bindColumn()
描述:将execute()方法执行的结果中的某一列数据,绑定到一个变量之上
语法:
$pdoso->execute();
$pdoso->bindColumn(omdex,$变量名);
说明:
$pdoso 对象在执行execute()完毕后,就从半成品的身份,变成了成品的身份
即包含了结果所需要的内容
require_once"singletonPDO.php";
$pdo=singletonPDO::getPdo();
$pdo->exec('set names utf8’);
$sql='select*from gradeonesheet where1';
$pdoso->execute();
$pdoso->bindColum(1,$stuName);
$pdoso->bindColumn(2,$stuGender);
$pdoso->bindColumn(3,$stuAge);
$pdoso->bindColumn(4,$stuNumber);
$pdoso->bindColumn(5,$stuScore);
//
$info=[];
$i=0;
while($row=$pdoso->fetch(PDO::FETCH_COLUMN)){
$arr=[$stuName,$stuGender,$stuAge,$stuName,$sthScore];
$info[$i]=$arr;
$i++;
//echo "$stuName".'---'."$stuGender".'---'."$stuAge".'---'."$stuNumber".'---'."$stuScore"." <br/>";
}
echo "<pre>";
// $info = [];
// for($i=0; $pdoso->fetch(PDO::FETCH_COLUMN); $i++){
//$info[$i] = array($stuName, $stuGender, $stuAge, $stuName, $stuScore);
// }
// echo "<pre>";
// print_r($info); print_r($info);
//
5.事物处理transaction
描述:
require_once "singletonPDO.php";
$pdo= singletonPDO::getPdo();
$pdo->exec('set names utf8');
$pdo->query('set names utf8');
try{
//try中所有的execute()事件都必须在事物开启命令之后执行
$pdo-> beginTransaction();
//事务只要开启了,那么接下来该做什么做什么,不受影响
$sql="update stud set stuScore=? where stuName=?";
$pdoso=$pdo->prepare($sql);
//第一次执行
$pdoso->execute(array('200',frank'));
//第二次执行
$pdoso->execute(array('200','123'));
// $pdoso->execute(array('100','frank'));
// $pdoso->execute(array('99','amy'));
//结束事务,通过commit()方法来将所有的修改确认提交
echo$pdo->commit();
}catch(Exception $e){
//不管try 中哪一个excute事件发生错误,都将所有事务中之前对数据库所做的修改还原
//回归到事务开始之前的装填
$pdo->rollBack();
echo'’事务处理失败,数据库回滚成功,没有受到任何影响‘;
}
?>
?>