PDO操作

PDO操作

描述:odp是php对数据库操作统一化的操作

语法:$pdo = new PDO("DB名:host=主机名;dbname=DB名","DB账号","DB密码");

//注:第一个db名为数据的类型,如:mysql、Oracle

//因为数据调用的方式为生成对象去操作,程序可以生产多个对象多次调用,这样容易操作数据库操作的不可避免的错误,所以可以使用单例模式(即单个对象去操作)进行数据库操作。

例:

<?php

       class singletonPdo{

              private static $pdo =null;     //通过私有+静态声明单例对象

              public static function getPdo(){  

        //通过一个公共的静态方法去返回单例的数据连接对象

                     if(self::$pdo == null){    //判断单例对象是否存在,不存在即初始化

                            try{

                                   //生成单例模式的数据库连接对象

                                   self::$pdo =new PDO('mysql:host=localhost','root','root');

                            }catch(PDOException $e){

                                   echo "连接错误,信息为:".$e->getMessage();

                            }

                     }

                     return self::$pdo;   //存在则直接返回

              }

       }

?>

最后,由于数据库的多次重复性的操作,我们可以创建一个单独php文件来存放单例的PDO类,需要使用即通过require_once ‘XX.php’;的方式进行调用。

//require_once语法代表意思为调用一次,可以重复多少调用。

//调用之后使用 类名字::自己定义的静态方法 (例:singletonPdo:: getPdo();)得到pdo单例数据库连接对象

PDO的异常处理Exception

1.连接数据库时发生的错误:直接使用try...catch捕获即可

2.当数据库操作时发生异常的处理方式

(1)第一种处理方式:直接通过系统提供的errorCode()和errorInfo()属性实现    //默认模式

pdo对象->errorCode();//返回一条错误代码

pdo对象->errorInfo();//返回一条错误信息,并不准确

(2)第二种处理方式:设置数据库操作发生异常的时候,弹出警告,但程序执行不会中断       //警告模式

pdo对象->setAttribute(PDD::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

(3)第三种处理方式: 设置当数据库发生异常的时候,进行中断

$pdo对象->setAttribute(PDD::ATTR_ERRMODE,PDD::ERRMODE_EXCEPTION);

说明:操作异常并不是需要三种都写完,哪怕一种都不写都可以,书写异常是为了在开发过程中对可能出现的问题能得到快速的解决方式

 

PDO操作数据库的两种方式:

1.     第一种方式:

$pdos->exec(set names utf8);     //设置编码格式为utf8避免乱码情况 ,可以不写

$pdos->exec($sql);        //$sql对象则为一条sql语句变量

//说明:(1)$pdos为pdo连接对象,exec()方法相当于query()方法一样

(2)exec()方法返回值为int类型,对查询后的操作没法进行,所以我们使用第二种

2.     第二种方式:预处理

$sql=”insert into userlist values(?,?)”;   //定义一条sql语句,但参数使用?为占位符

$pdoso = $pdo->prepare($sql);         //使用prepare将半成品的sql语句传递进去

注:prepare();方法只执行半成品的sql语句

 

//使用数组的方式将参数以数组的方式传递进去,并使用execute方式执行sql语句

echo $pdoso->execute(array(“lisi”,”123456”));

还有一种方式可以传递参数:使用bindValue()方法也可以将参数传递进去

$pdoso->bindValue(1,”lisi”);

$pdoso->bindValue(2,”123456”);       //注意:应该有多少就传递多少

$pdoso->execute();      //最后使用execute();方法去执行就可以了

bindColumn()方法 //注:必须在execute方法之后,将执行结果一列数据绑定给一个指定的对象上

语法:$pdoso->bindColumn(int,指定变量);  //第一个为列数。第二个为要放进的变量名字

补充:如进行循环遍历对数组进行操作,可以使用 fetch()方法 用于获取结果集的下一行,里面传递一个PDO::FETCH_COLUMN常量,从结果集中的下一行返回所需要的那一列。

语法:$pdoso->fetch(PDO::FETCH_COLUMN)

例:

    //预处理操作数据库

    require_once 'SingletonPdo.php';

    $pdo = singletonPdo::getPdo();

$pdo->exec('set names utf8');

    //添加数据操作

    $sql = "insert into userlist values('夏明','123456')";

    $pdoso = $pdo->prepare($sql);

    $result = $pdoso->execute();

    //数据库查询

    $sql = "select * from userlist where 1";

    $pdoso = $pdo->prepare($sql);

    $pdoso->execute();

    $pdoso->bindColumn(1,$name);

    $pdoso->bindColumn(2,$pass);

    $info=[];

    //通过$pdoso->fetch(PDO::FETCH_COLUMN) 遍历每一条数据,直至最后一条

    for($i=0;$row = $pdoso->fetch(PDO::FETCH_COLUMN);$i++){

        $info[$i] =array('username'=>$name,'password'=>$pass);

    }

    print_r($info); //数据已经放到$info数组之中,将他打印出来

事务处理transaction

概念:多个事件组成的结构  事件:实际上就是指预处理的execut方法

整个事务必须放在try...catch中,因为不能保证每条都能成功运行,而且对事务来说任何一条都会导致catch的触发,所以我们在catch中添加添加回滚操作:$pdo->rollback()对所有操作进行还原

 

       语法:开启事务:$pdo->benginTransaction();     关闭事务:$pdo->commit();

       注意:

  1. 然后为了防止乱码问题,应当设置一下编码格式:$pdo->(“set names utf8”);
  2. 为了当运行时发生错误因该中断操作进行还原,而不是关闭事务,所以在生成单例连接数据库对象后我们应该添加一句中断处理异常语句:

$pdo对象->setAttribute(PDD::ATTR_ERRMODE,PDD::ERRMODE_EXCEPTION);

 

例:

<?php

class newPdo{

    private static $pdo;

    public static function getPdo(){

        if(self::$pdo==null){

            try{

                self::$pdo =new PDO("mysql:host=localhost;dbname=db","root","root");

                //为了在事务处理中出现错误时中断然后进行还原操作,所以增加一句中断操作语句

                self::$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

            }catch(PDOException $err){

                echo '连接错误!'.$err->getMessage();

            }

        }

        return self::$pdo;

    }

}

?>
<?php

class newPdo{

    private static $pdo;

    public static function getPdo(){

        if(self::$pdo==null){

            try{

                self::$pdo =new PDO("mysql:host=localhost;dbname=db","root","root");

                //为了在事务处理中出现错误时中断然后进行还原操作,所以增加一句中断操作语句

                self::$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

            }catch(PDOException $err){

                echo '连接错误!'.$err->getMessage();

            }

        }

        return self::$pdo;

    }

}

?>

PHP数据库扩展 - PDO操作的更多相关文章

  1. PHP数据库基于PDO操作类(mysql)

    这是网上找的关于Mysql的操作类,非常适合初学者使用 <?php class Mysql { protected static $_dbh = null; //静态属性,所有数据库实例共用,避 ...

  2. php笔记08:数据库编程---使用php的MySQL扩展库操作MySQL数据库

    1.使用php的MySQL扩展库操作MySQL数据库: php有3种方式操作MySQL数据库 (1)mysql扩展库 (2)mysqli扩展库 (3)pdo     mysql扩展库与mysql数据库 ...

  3. PHP 笔记——PDO操作数据库

    一.简介 ​ PHP 5.1可使用轻量级的统一接口 PDO(PHP Data Object,PHP数据对象)来访问各种常见的数据库.而使用PDO只需要指定不同的 DSN(数据源名称)即可访问不同的数据 ...

  4. 使用PDO操作数据库的好处

    PDO一是PHP数据对象(PHP Data Object)的缩写. 并不能使用PDO扩展本身执行任何数据库操作,必须使用一个database-specific PDO driver(针对特定数据库的P ...

  5. php pdo操作数据库

    POD扩展是在PHP5中加入,该扩展提供PHP内置类 PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题. PDO的特点: 性能.PDO 从一开始就吸取了现有数据库扩展成 ...

  6. php pdo操作数据库的方法

    PDO 安装 你可以通过 PHP 的 phpinfo() 函数来查看是否安装了PDO扩展. 1.在 Unix /linux系统上安装 PDO 在Unix上或Linux上你需要添加以下扩展: exten ...

  7. mysqli扩展库操作mysql数据库

    配置环境 配置php.ini文件让php支持mysqli扩展库 extension=php_mysqli.dll 建库建表 详见博客 “mysql扩展库操作mysql数据库” 查询数据库 <?p ...

  8. mysql扩展库操作mysql数据库

    环境搭建 启用mysql扩展库,在php.ini文件中去配置mysql扩展库 extension=php_mysql.dll 查询数据库 1.建库建表 //建库testcreate database ...

  9. 使用php的mysqli扩展库操作mysql数据库

    简单介绍mysqli: 1.mysqli(mysql improve mysql扩展库的增强版) mysql扩展库和mysqli扩展库的区别 1.mysqli的稳定性  安全性 和 执行效率有所提高 ...

随机推荐

  1. ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall (暴力)

    题意:一个n*m的方格矩阵,有的格子被涂成了黑色,问该矩阵中有多少个子矩阵,子矩阵不包含黑色格子; 思路:对于一个长为L, 高为H的无黑点矩阵中包含的高为H的子矩阵个数为L+(L-1)+(L-2)+. ...

  2. linux查看硬盘空间,删除大文件

    df -Phdu -h --max-depth=1du -sh /u02/weblogic/user_projects/domains/logsdu -sh /u02/mysqlfind / -siz ...

  3. Jquery 实现表单验证,所有验证通过方可提交

    1. [代码]Jquery 实现表单验证,所有验证通过方可提交 ? 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 ...

  4. CMD当前代码页修改

    python3.x在程序开发中统一的编码是 UTF-8,但是进行交互式编程的时候会经常遇到乱码问题,这是因为Window cmd的默认编码是GBK.与程序采用的 UTF-8 不一致造成的中文及特殊字符 ...

  5. DB2 触发器使用1

    本文基于多篇博文整理而来,目的是较全面的学会使用DB2触发器,后期再整理复杂的使用场景,看完本文应该能够自己创建一个基本的触发器. 1.什么是触发器当一个指定的 SQL 操作(如 DELETE,INS ...

  6. 029 Divide Two Integers 两数相除

    不使用乘号,除号和取模符号将两数相除.如果溢出返回 MAX_INT.详见:https://leetcode.com/problems/divide-two-integers/description/ ...

  7. JSP标签和JSTL标签注意点

    1.转发和重定向问题 当前项目:/Test 转发路径:"/"根目录表示当前项目"/Test","/login.jsp"就是"/Te ...

  8. 敏捷开发(Agile development)

    敏捷开发(Agile development) 敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征. ...

  9. linux下安装redis和部署

    转自简书:https://www.jianshu.com/p/bc84b2b71c1c 1.基础知识  redis是用C语言开发的一个开源的高性能键值对(key-value)数据库.它通过提供多种键值 ...

  10. android sqlite 递归删除一棵子树

    背景:android studio 3.0 GreenDao 目标:在android 中,如何做到递归删除某颗子树?? ======================================== ...