发布于2021-03-14 05:56 阅读(725) 评论(0) 点赞(22) 收藏(5)
1.singleLeton
singleLeton称为单例模式,是一种构造类的设计模式。
目的是为了在全局获取这个类的对象时总能获取到唯一的对象,而不是每次实例化都创建出新的对象的一种结构。
特别是在DB操作中,DB连接这种对象就必须是通过单例模式来实现的。
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php class DBConnectionSingleton{ private static $con = null; //使用私有静态变量声明单例对象 public static function getcon(){ if (!self:: $con ){ //对象self相当于this,表示当前类本身 self:: $con = new self(); //通过静态变量只执行一次的特点保证对象全局唯一性的特点。 } return self:: $con ; } } $con1 = DBConnectionSingleton::getcon(); //获取类中的静态方法使用“::”操作符!! $con2 = DBConnectionSingleton::getcon(); print_r ( $con1 ); print_r ( $con2 ); //两次实例化结果相同 ?> |
2.PDO
PDO是PHP数据对象,即 PHP Data Object。
PDO可以被视为一个工具,该工具为PHP访问数据库定义了一个轻量级的一致接口。
实现PDO接口的每一个数据库驱动,可以公开具体数据库的特性作为标准扩展功能。
语法:$pdo = new PDO("DB名:host=主机名; dbname=数据库名", "DB账号","DB密码");
DB名 就是所使用的数据库,即MySQL或Oracle或mangodb等;
主机名 是数据库服务器地址,localhost或127.0.0.1或其他ip地址;
注意:
⑴ 利用PDO扩展自身并不能实现任何数据库功能,
必须使用一个具体数据库的PDO驱动来访问数据库服务;
⑵ PDO提供了一个“数据访问”抽象层,这意味着不管使用哪种数据库,
都可以用相同的函数(方法)来查询和获取数据;
⑶ PDO不提供数据库抽象层,它不会重写SQL,也不会模拟缺失的特性,
如果需要的话,应该使用一个成熟的抽象层;
⑷ 从PHP5.1开始附带了PDO,而在PHP5.0中是作为一个pecl扩展使用,
PDO需要PHP5核心的新特性,因此不能在较早版本的PHP上运行。
补充:
为了检测DB链接状态是否成功,PDO提供了“try...catch”机制。
语法:
try{
$pdo = new PDO('mysql:host=lcalhost; dbname=dbTest','root','');
}catch(PDOException $err){ //PDOException 为PDO内置异常对象
echo '连接异常,错误信息:';
echo $err->getMessage(); //getMessage()是PDO内置获取错误信息的方法。
}
在上述“try...catch”结构中,try部分是可能会出现异常的代码,
当代码执行过程中,一旦 try 部分的代码发生异常,那么会立即将这个异常抛出,
并执行 catch 部分的代码。
catch 部分的形参“$err”就是用来接收抛出的异常信息的。
3.singleton获取PDO
下述代码示例可以作为通过 singleton 获取PDO数据库连接的一个基础模板。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php header( 'Content-type: text/html; charset=UTF8' ); class singletonPDO{ private static $pdo = null; //使用私有静态变量声明单例对象 public static function getPdo(){ if (self:: $pdo ==null){ try { self:: $pdo = new PDO( "mysql:host=localhost;dbname=dbTest" , "root" , "" ); } catch (PDOException $err ){ echo "数据库连接失败,错误信息:" . $err ->getMessage(); } } return self:: $pdo ; } } $pdo1 = singletonPDO::getPdo(); print_r ( $pdo1 ); // 可以通过“ require''或include'' ”方法,在其他PHP文件中引用这个模板。 // 为避免重复多次引用,可以使用“ require_once'' ”。 ?> |
4.PDO实现DB增删改查
通过PDO对DB进行操作和PHP直接操作类似。
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php require_once '20210111singleton.php' ; //引入PDO连接文件 $pdo2 = singletonPDO::getPdo(); //通过单例方法获取全局唯一PDO对象 $pdo2 -> exec ( 'set names utf8' ); //PDO中的“exec()”方法与PHP的“query()”方法相当,用于执行SQL语句 $sql = "insert into namelist(name,age,sex,password) values('Lucy',27,'girl','111111')" ; $res = $pdo2 -> exec ( $sql ); //通过PDO执行DB操作 if ( $res ){ echo 'execute success!' ; } else { echo 'execute error!' ; } ?> |
注意:通过PDO执行DB查询时,查询结果为不可见,需要结合“预处理prepare和事务处理transaction”。
5.PDO异常处理Exception
异常处理Exception是指在“try...catch”过程中发生异常时的处理手段,通常都是直接抛出提醒即可。
设置提醒的方法有三种:
⑴ 默认模式
主要依赖于系统提供的“errorCode”和“errorInfo”属性实现;
⑵ 警报模式
为PDO设置:setAttribute(PDO::ATTR_ERRORMODE,PDO::WRRORMODE_WARNING);
⑶ 中断模式
为PDO设置:setAttribute(PDO::ATTR_ERRORMODE,PDO::ERRORMODE_EXCEPTION);
说明:
上述三种异常处理模式,都指的是在执行DB操作时发生的异常,比如SQL语句异常或语法错误;
如果DB连接发生错误,则不会走该异常处理,而是直接由PDO输出连接失败,try...catch 中的 PDOException。
注意:
三种异常处理代码在程序中书写的位置不同!!!
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?php class singletonPDO{ private static $pdo = null; public static function getPdo(){ if (self:: $pdo ==null){ try { self:: $pdo = new PDO( "mysql:host=localhost;dbname=dbTest" , "root" , "" ); // 第二种和第三种异常处理方法,在“try”中定义! // 第二种异常处理方法,当数据库错做发生异常时,抛出警报提示,程序执行不会中断 self:: $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); // 第三种异常处理方法,当数据库错做发生异常时,程序执行中断并抛出错误信息 self:: $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } // DB连接异常通过“catch()”方法进行捕获并抛出 catch (PDOException $err ){ echo "数据库连接失败,错误信息:" . $err ->getMessage(); } } return self:: $pdo ; } } $pdo2 = singletonPDO::getPdo(); $pdo2 -> exec ( 'set names utf8' ); $sql = "insert into namelist1(name,age,sex,password) values('Lucy',27,'girl','111111')" ; $res = $pdo2 -> exec ( $sql ); if ( $res ){ echo 'execute success!' ; } else { echo 'execute error!' . '<br>' ; // 系统提供的“errorCode”和“errorInfo”异常处理方法,通过 echo 抛出。 echo $pdo2 ->errorCode(); echo $pdo2 ->errorInfo(); } ?> |
提示:
在代码程序中,异常处理并不是必须有一种或多种,不设置异常处理机制也不违法,
但是,主动实现异常处理,能够在异常发生的时候能够给出更友好的提示信息,
因此,如果允许的情况下,尽可能的添加异常处理模块代码。
原文链接:https://www.cnblogs.com/husa/p/14264597.html
作者:叮叮当当
链接:http://www.phpheidong.com/blog/article/2922/55a4d3cb49ef3b7121b5/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!