目录
目录
前面的话
创建PDO对象
使用PDO对象
事务处理
首页 php教程 php手册 前端学PHP之PDO基础操作

前端学PHP之PDO基础操作

Dec 05, 2016 pm 01:26 PM

×
目录
[1]创建PDO [2]使用PDO [3]事务处理

前面的话

  PDO(php data object)扩展类库为php访问数据库定义了轻量级的、一致性的接口,它提供了一个数据库访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据,大大简化了数据库的操作,并能够屏蔽不同数据库之间的差异,使用PDO可以很方便地进行跨数据库程序的开发,以及不同数据库间的移植,是将来php在数据库处理方面的主要发展方向,它可以支持mysql、postgresql、oracle、mssql等多种数据库

 

创建PDO对象

  使用PDO在与不同数据库管理系统之间交互时,PDO对象中的成员方法是统一各种数据库的访问接口,所以在使用PDO与数据库进行交互之前,首先要创建一个PDO对象。在通过构造方法创建对象的同时,需要建立一个与数据库服务器的连接,并选择一个数据库

  PDO的构造方法原型如下

__construct ( <span style="color: #0000ff;">string</span> <span style="color: #800080;">$dsn</span> [,<span style="color: #0000ff;">string</span> <span style="color: #800080;">$username</span> [,<span style="color: #0000ff;">string</span> <span style="color: #800080;">$password</span> [,<span style="color: #0000ff;">array</span> <span style="color: #800080;">$driver_options</span> ]]] )
登录后复制

  在构造方法中,第一个必选的参数是数据源名(dsn),用来定义一个确定的数据库和必须用到的驱动程序。DSN的PDO命名惯例为PDO驱动程序的名称,后面为一个冒号,再后面是可选的驱动程序的数据库连接变量信息,如主机名、端口和数据库名

  构造方法中的第二个参数username和第三个参数password分别指定用于连接数据库的用户名和密码。最后一个参数driver_options需要一个数组,用来指定连接所需的所有额外选项,传递附加的调优参数到PDO或底层驱动程序

<span style="color: #008000;">/*</span><span style="color: #008000;">连接如果失败,使用异常处理模式进行捕获 </span><span style="color: #008000;">*/</span>
<span style="color: #800080;">$dsn</span> = 'mysql:dbname=pdotest;host=127.0.0.1'; <span style="color: #008000;">//</span><span style="color: #008000;">连接MySQL数据库的DSN </span>
<span style="color: #800080;">$user</span> = 'root'; <span style="color: #008000;">//</span><span style="color: #008000;">MySQL数据库的用户名</span>
<span style="color: #800080;">$password</span> = '*****'; <span style="color: #008000;">//</span><span style="color: #008000;">MySQL数据库的密码</span>
<span style="color: #0000ff;">try</span><span style="color: #000000;"> { 
     </span><span style="color: #800080;">$dbh</span> = <span style="color: #0000ff;">new</span> PDO(<span style="color: #800080;">$dsn</span>, <span style="color: #800080;">$user</span>, <span style="color: #800080;">$password</span><span style="color: #000000;">); 
} </span><span style="color: #0000ff;">catch</span> (PDOException <span style="color: #800080;">$e</span><span style="color: #000000;">) { 
      </span><span style="color: #0000ff;">echo</span> '数据库连接失败: ' . <span style="color: #800080;">$e</span>-><span style="color: #000000;">getMessage(); 
}</span>
登录后复制

  在创建PDO对象时,有一些与数据库连接相关的选项,可以将必要的几个选项组成数据传递给构造方法的第四个参数driver_opts中,用来传递附加的调优参数到PDO或底层驱动程序

 PDO::ATTR_AUTOCOMMIT):<span style="color: #000000;"> PDO是否关闭自动提交功能
 PDO</span>::ATTR_ERRMODE):<span style="color: #000000;"> 当前PDO的错误处理的模式 
 PDO</span>::ATTR_CASE):<span style="color: #000000;"> 表字段字符的大小写转: 
 PDO</span>::ATTR_CONNECTION_STATUS):<span style="color: #000000;"> 与连接状态相关特有信息: 
 PDO</span>::ATTR_ORACLE_NULLS):<span style="color: #000000;"> 空字符串转换为SQL的null 
 PDO</span>::ATTR_PERSISTENT):<span style="color: #000000;"> 应用程序提前获取数据大 
 PDO</span>::ATTR_SERVER_INFO):<span style="color: #000000;"> 与数据库特有的服务器信 
 PDO</span>::ATTR_SERVER_VERSION):<span style="color: #000000;"> 数据库服务器版本号信息
 PDO</span>::ATTR_CLIENT_VERSION): 数据库客户端版本号信息 
登录后复制
<span style="color: #008000;">//</span><span style="color: #008000;">设置持久连接的选项数组作为最后一个参数,可以一起设置多个元素 </span>
<span style="color: #800080;">$opt</span> = <span style="color: #0000ff;">array</span>(PDO::ATTR_PERSISTENT => <span style="color: #0000ff;">true</span><span style="color: #000000;">);   
</span><span style="color: #0000ff;">try</span><span style="color: #000000;"> { 
       </span><span style="color: #800080;">$db</span> = <span style="color: #0000ff;">new</span> PDO('mysql:dbname=pdotest;host=127.0.0.1','root','*****',<span style="color: #800080;">$opt</span><span style="color: #000000;">); 
} </span><span style="color: #0000ff;">catch</span> (PDOException <span style="color: #800080;">$e</span><span style="color: #000000;">) { 
       </span><span style="color: #0000ff;">echo</span> "数据库连接失败: " .<span style="color: #800080;">$e</span>-><span style="color: #000000;">getMessage(); 
}</span>
登录后复制

 

使用PDO对象

调整PDO的行为属性

  在PDO对象中有很多属性用来调整PDO的行为或获取底层驱动程序状态。如果在创建PDO对象时,没有在构造方法中最后一个参数过属性选项,也可以在对象创建完成之后,通过PDO对象中的setAttribute()和getAttribute()方法设置和获取这些属性的值

PDO::getAttribute()

  PDO::getAttribute()用于取回一个数据库连接的属性

<span style="color: #0000ff;">mixed</span> PDO::getAttribute ( int <span style="color: #800080;">$attribute</span> )
登录后复制

PDO::setAttribute()

  PDO::setAttribute()用于设置属性

bool PDO::setAttribute ( int <span style="color: #800080;">$attribute</span> , <span style="color: #0000ff;">mixed</span> <span style="color: #800080;">$value</span> )
登录后复制
<span style="color: #800080;">$dbh</span>->setAttribute(PDO::ATTR_ERRMODE, PDO::<span style="color: #000000;">ERRMODE_EXCEPTION);
</span><span style="color: #008000;">//</span><span style="color: #008000;">$dbh->setAttribute(3,2); </span>
<span style="color: #800080;">$dbh</span>->setAttribute(PDO::ATTR_AUTOCOMMIT,0);<span style="color: #008000;">//</span><span style="color: #008000;">$dbh->setAttribute(0,0); </span>
<span style="color: #800080;">$dbh</span>->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::<span style="color: #000000;">FETCH_ASSOC);
</span><span style="color: #008000;">//</span><span style="color: #008000;">$dbh->setAttribute(19,2); </span>

<span style="color: #0000ff;">echo</span> "\nPDO是否关闭自动提交功能:". <span style="color: #800080;">$dbh</span>->getAttribute(PDO::<span style="color: #000000;">ATTR_AUTOCOMMIT);
</span><span style="color: #0000ff;">echo</span> "\n当前PDO的错误处理的模式:". <span style="color: #800080;">$dbh</span>->getAttribute(PDO::<span style="color: #000000;">ATTR_ERRMODE); 
</span><span style="color: #0000ff;">echo</span> "\n表字段字符的大小写转换: ". <span style="color: #800080;">$dbh</span>->getAttribute(PDO::<span style="color: #000000;">ATTR_CASE); 
</span><span style="color: #0000ff;">echo</span> "\n与连接状态相关特有信息: ". <span style="color: #800080;">$dbh</span>->getAttribute(PDO::<span style="color: #000000;">ATTR_CONNECTION_STATUS); 
</span><span style="color: #0000ff;">echo</span> "\n空字符串转换为SQL的null:". <span style="color: #800080;">$dbh</span>->getAttribute(PDO::<span style="color: #000000;">ATTR_ORACLE_NULLS); 
</span><span style="color: #0000ff;">echo</span> "\n应用程序提前获取数据大小:".<span style="color: #800080;">$dbh</span>->getAttribute(PDO::<span style="color: #000000;">ATTR_PERSISTENT); 
</span><span style="color: #0000ff;">echo</span> "\n与数据库特有的服务器信息:".<span style="color: #800080;">$dbh</span>->getAttribute(PDO::<span style="color: #000000;">ATTR_SERVER_INFO); 
</span><span style="color: #0000ff;">echo</span> "\n数据库服务器版本号信息:". <span style="color: #800080;">$dbh</span>->getAttribute(PDO::<span style="color: #000000;">ATTR_SERVER_VERSION);
</span><span style="color: #0000ff;">echo</span> "\n数据库客户端版本号信息:". <span style="color: #800080;">$dbh</span>->getAttribute(PDO::ATTR_CLIENT_VERSION); 
登录后复制

错误处理

  PDO一共提供了三种不同的错误处理模式,不仅可以满足不同风格的编程,也可以调整扩展处理错误的方式

PDO:ERRORMODE_SILENT

  这是默认模式,在错误发生时不进行任何操作,PDO将只设置错误代码。开发人员可以通过PDO对象中的errorCode()和errorInfo()方法对语句和数据库对象进行检查。如果错误是由于对语句对象的调用而产生的,那么可以在那个语句对象上调用errorCode()或errorInfo()方法。如果错误是由于调用数据库对象而产生的,那么可以在那个数据库对象上调用上述两个方法

PDO:ERRMODE_WARNING

  除了设置错误代码以外,PDO还将发出一条PHP传统的E_WARNING消息,可以使用常规的PHP错误处理程序捕获该警告。如果只是想看看发生了什么问题,而无意中断应用程序的流程,那么在调试或测试中这种设置很有用

<span style="color: #800080;">$dbh</span>->setAttrbute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);<span style="color: #008000;">//</span><span style="color: #008000;">设置警告模式处理错误</span>
登录后复制

PDO:ERRMODE_EXCEPTION

  除了设置错误代码以外,PDO还将抛出一个PDOException,并设置其属性,以反映错误代码和错误信息。这种设置在调试中也很有用,因为它会放大脚本中产生错误的地方,从而可以非常快速地指出代码中有问题的潜在区域。异常模式另一个有用的地方是,与传统的PHP风格的警告相比,可以更清晰地构造自己的错误处理,而且,比起以寂静方式及显式检查每个数据库调用的返回值,异常模式代码及嵌套代码也更少

<span style="color: #800080;">$dbh</span>->setAttrbute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);<span style="color: #008000;">//</span><span style="color: #008000;">设置异常模式处理错误</span>
登录后复制

执行SQL语句

  在使用PDO执行查询数据之前,先提供一组相关的数据。创建PDO对象并通过mysql驱动连接mysql数据库服务器,创建一个以'testdb'命名的数据库,并在该数据库中创建一个联系人信息表contactInfo

<span style="color: #000000;">CREATE TABLE contactInfo(
    uid MEDIUMINT(</span>8) UNSIGNED NOT <span style="color: #0000ff;">NULL</span> AUTO_INCREMENT,<span style="color: #000000;">
    name VARCHAR(</span>50) NOT <span style="color: #0000ff;">NULL</span>,<span style="color: #000000;">
    departmentID CHAR(</span>3) NOT <span style="color: #0000ff;">NULL</span>,<span style="color: #000000;">
    address VARCHAR(</span>80) NOT <span style="color: #0000ff;">NULL</span>,<span style="color: #000000;">
    phone VARCHAR(</span>20),<span style="color: #000000;">
    email VARCHAR(</span>20),<span style="color: #000000;">
    PRIMARY </span><span style="color: #008080;">KEY</span><span style="color: #000000;">(uid)
);</span>
登录后复制

  数据表contactInfo建立之后,向表中插入多行记录

INSERT INTO contactInfo(name,departmentID,address,phone,email) VALUES ('张三','D01','朝阳','15011111234','zs@aaa.com'),('李四','D02','朝阳','15011112345','ls@aaa.com'),('王五','D02','海淀','15011113456','ww@aaa.com'),('赵四','D01','海淀','15011114567','zx@aaa.com');
登录后复制

PDO::exec()

  PDO::exec()函数执行一条SQL语句,并返回受影响的行数

int PDO::<span style="color: #008080;">exec</span> ( <span style="color: #0000ff;">string</span> <span style="color: #800080;">$statement</span> )
登录后复制

  当执行INSERT、UPDATE、DELETET等没有结果集的查询时,使用PDO对象中的exec()方法去执行。该方法成功执行后,将返回受影响的行数

<span style="color: #000000;">php
</span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
    </span><span style="color: #008000;">//</span><span style="color: #008000;">创建对象</span>
    <span style="color: #800080;">$dbh</span> = <span style="color: #0000ff;">new</span> PDO("mysql:host=localhost;dbname=testdb", "root", "zhiaihebe0123"<span style="color: #000000;">);
}</span><span style="color: #0000ff;">catch</span>(PDOException <span style="color: #800080;">$e</span><span style="color: #000000;">) {
    </span><span style="color: #0000ff;">echo</span> "数据库连接失败:".<span style="color: #800080;">$e</span>-><span style="color: #000000;">getMessage();
    </span><span style="color: #0000ff;">exit</span><span style="color: #000000;">;
}

</span><span style="color: #800080;">$query</span> = "UPDATE contactInfo SET phone='12345678900' WHERE name='张三'"<span style="color: #000000;">;
</span><span style="color: #800080;">$affected</span> = <span style="color: #800080;">$dbh</span>-><span style="color: #008080;">exec</span>(<span style="color: #800080;">$query</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$affected</span><span style="color: #000000;">){
    </span><span style="color: #008000;">//</span><span style="color: #008000;">数据表contactInfo中受影响的行数为:1</span>
    <span style="color: #0000ff;">echo</span> '数据表contactInfo中受影响的行数为:' .<span style="color: #800080;">$affected</span><span style="color: #000000;">;
}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
    </span><span style="color: #008080;">print_r</span>(<span style="color: #800080;">$dbh</span>-><span style="color: #000000;">errorInfo());
}
</span><span style="color: #800080;">$query</span> = "UPDATE contactInfo SET phone='123456789' WHERE (uid%2 = 0)"<span style="color: #000000;">;
</span><span style="color: #800080;">$affected</span> = <span style="color: #800080;">$dbh</span>-><span style="color: #008080;">exec</span>(<span style="color: #800080;">$query</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$affected</span><span style="color: #000000;">){
    </span><span style="color: #008000;">//</span><span style="color: #008000;">数据表contactInfo中受影响的行数为:2</span>
    <span style="color: #0000ff;">echo</span> '数据表contactInfo中受影响的行数为:' .<span style="color: #800080;">$affected</span><span style="color: #000000;">;
}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
    </span><span style="color: #008080;">print_r</span>(<span style="color: #800080;">$dbh</span>-><span style="color: #000000;">errorInfo());
}
</span>?>
登录后复制

PDO::lastInsertId()

  PDO::lastInsertId()函数用于返回最后插入行的ID或序列值

<span style="color: #0000ff;">string</span> PDO::lastInsertId ([ <span style="color: #0000ff;">string</span> <span style="color: #800080;">$name</span> = <span style="color: #0000ff;">NULL</span> ] )
登录后复制
<span style="color: #000000;">php
</span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
    </span><span style="color: #008000;">//</span><span style="color: #008000;">创建对象</span>
    <span style="color: #800080;">$dbh</span> = <span style="color: #0000ff;">new</span> PDO("mysql:host=localhost;dbname=testdb", "root", "zhiaihebe0123"<span style="color: #000000;">);
}</span><span style="color: #0000ff;">catch</span>(PDOException <span style="color: #800080;">$e</span><span style="color: #000000;">) {
    </span><span style="color: #0000ff;">echo</span> "数据库连接失败:".<span style="color: #800080;">$e</span>-><span style="color: #000000;">getMessage();
    </span><span style="color: #0000ff;">exit</span><span style="color: #000000;">;
}

</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{
    </span><span style="color: #800080;">$query</span> = "INSERT INTO contactInfo(name,departmentID,phone,email) VALUES ('诸葛','D03','120120120','zg@aaa.com')"<span style="color: #000000;">;
    </span><span style="color: #800080;">$affected</span> = <span style="color: #800080;">$dbh</span>-><span style="color: #008080;">exec</span>(<span style="color: #800080;">$query</span><span style="color: #000000;">);    
    </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$affected</span>."<br>";<span style="color: #008000;">//</span><span style="color: #008000;">1</span>
    <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$dbh</span>->lastInsertId();<span style="color: #008000;">//</span><span style="color: #008000;">5</span>
}<span style="color: #0000ff;">catch</span>(PDOException <span style="color: #800080;">$e</span><span style="color: #000000;">){
    </span><span style="color: #0000ff;">echo</span> "错误:" .<span style="color: #800080;">$e</span>-><span style="color: #000000;">getMessage();
}
</span>?>
登录后复制

PDO::query()

  当执行返回结果集的SELECT查询时,或者所影响的行数无关紧要时,应当使用PDO对象中的query()方法。如果该方法成功执行指定的查询,则返回一个PDOStatement对象。如果使用了query()方法,并想了解获取的数据行总数,可以使用PDOStatement对象中的rowCount()方法获取

PDOStatement::rowCount()

  PDOStatement::rowCount()函数返回受上一个 SQL 语句影响的行数

int PDOStatement::rowCount ( void )
登录后复制
<span style="color: #000000;">php
</span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
    </span><span style="color: #008000;">//</span><span style="color: #008000;">创建对象</span>
    <span style="color: #800080;">$dbh</span> = <span style="color: #0000ff;">new</span> PDO("mysql:host=localhost;dbname=testdb", "root", "zhiaihebe0123"<span style="color: #000000;">);
}</span><span style="color: #0000ff;">catch</span>(PDOException <span style="color: #800080;">$e</span><span style="color: #000000;">) {
    </span><span style="color: #0000ff;">echo</span> "数据库连接失败:".<span style="color: #800080;">$e</span>-><span style="color: #000000;">getMessage();
    </span><span style="color: #0000ff;">exit</span><span style="color: #000000;">;
}
</span><span style="color: #800080;">$query</span> = "SELECT name,phone,email FROM contactInfo WHERE departmentId='D01'"<span style="color: #000000;">;
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{
    </span><span style="color: #800080;">$pdostatement</span> = <span style="color: #800080;">$dbh</span>->query(<span style="color: #800080;">$query</span><span style="color: #000000;">);    
    </span><span style="color: #0000ff;">echo</span> "一共从表中获取到".<span style="color: #800080;">$pdostatement</span>->rowCount()."条记录:<br>"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">foreach</span>(<span style="color: #800080;">$pdostatement</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$row</span><span style="color: #000000;">){
        </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$row</span>['name'] ."\t"<span style="color: #000000;">;
        </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$row</span>['phone'] ."\t"<span style="color: #000000;">;
        </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$row</span>['email'] ."<br>"<span style="color: #000000;">;
    }
}</span><span style="color: #0000ff;">catch</span> (PDOException <span style="color: #800080;">$e</span><span style="color: #000000;">){
    </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$e</span>-><span style="color: #000000;">getMessage();
}
</span>?>
登录后复制

 

事务处理

  事务是确保数据库一致的机制,是一个或一系列的查询,作为一个单元的一组有序的数据库操作。如果组中的所有SQL语句都操作成功,则认为事务成功,事务则被提交,其修改将作用于所有其他数据库进程。即使在事务的组中只有一个环节操作失败,事务也不成功,则整个事务将被回滚,该事务中所有操作都被取消。事务功能是企业级数据库的一个重要部分,因为很多业务过程都包括多个步骤。如果任何一个步骤失败,则所有步骤都不应发生。事务处理有4个特征:原子性(Atomicity)、一致性(Consistency)、独立性(Isolation)和持久性(Durability),即ACID。对于在一个事务中执行的任何工作,即使它是分阶段进行的,也一定可以保证该工作会安全地应用于数据库,并且在工作被提交时,不会受到其他连接的影响

  MySQL目前只有InnoDB和BDB两个数据库表类型才支持事务,两个表类型具有相同的特性,InnoDB表类型具有比BDB还丰富的特性,速度更快,因此建议使用InnoDB表类型。创建InnoDB类型的表实际上与创建任何其他类型表的过程没有区别,如果数据库没有设置为默认的表类型,只要在创建时显式指定要将表创建为InnoDB类型

  要实现事务处理,首先要使用InnoDB引擎

ALTER TABLE contactInfo engine=innodb;
登录后复制

  在默认的情况下,MySQL是以自动提交(autocommit)模式运行的,这就意味着所执行的每一个语句都将立即写入数据库中。但如果使用事务安全的表格类型,是不希望有自动 提交的行为的,所以要在当前的会话中关闭自动提交

SET AUTOCOMMIT = 0;<span style="color: #008000;">//</span><span style="color: #008000;">在当前的会话中关闭自动提交</span>
登录后复制

  如果提交被打开了,必须开启一个事务;如果自动提交是关闭的,则不需要使用这条命令,因为输入一个SQL命令时,一个事务将自动启动

START TRANSACTION;<span style="color: #008000;">//</span><span style="color: #008000;">开启一个事务</span>
登录后复制

  在完成了一组事务的语句输入后,需要提交一个事务,该事务才能在其他会话中被其他用户所见

COMMIT;<span style="color: #008000;">//</span><span style="color: #008000;">提交一个事务给数据库</span>
登录后复制

  如果改变注意,可以回滚到以前的状态

ROOLBACK;<span style="color: #008000;">//</span><span style="color: #008000;">事务被回滚,所有操作都被取消</span>
登录后复制

  事务处理完成后,再次开启自动提交

SET AUTOCOMMIT = 1;
登录后复制

  下面在PHP中进行事务处理操作,对张三和李四进行部门交换来轮岗培养

<span style="color: #000000;">php
</span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
    </span><span style="color: #008000;">//</span><span style="color: #008000;">创建对象</span>
    <span style="color: #800080;">$dbh</span> = <span style="color: #0000ff;">new</span> PDO("mysql:host=localhost;dbname=testdb", "root", "zhiaihebe0123"<span style="color: #000000;">);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">设置错误使用异常的模式</span>
    <span style="color: #800080;">$dbh</span> -> setAttribute(PDO::ATTR_ERRMODE, PDO::<span style="color: #000000;">ERRMODE_EXCEPTION);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">关闭自动提交</span>
    <span style="color: #800080;">$dbh</span>-> setAttribute(PDO::ATTR_AUTOCOMMIT, 0<span style="color: #000000;">);
}</span><span style="color: #0000ff;">catch</span>(PDOException <span style="color: #800080;">$e</span><span style="color: #000000;">) {
    </span><span style="color: #0000ff;">echo</span> "数据库连接失败:".<span style="color: #800080;">$e</span>-><span style="color: #000000;">getMessage();
    </span><span style="color: #0000ff;">exit</span><span style="color: #000000;">;
}
</span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
    </span><span style="color: #008000;">//</span><span style="color: #008000;">开启一个事务</span>
    <span style="color: #800080;">$dbh</span> -><span style="color: #000000;"> beginTransaction();
    </span><span style="color: #800080;">$affected_rows</span> = <span style="color: #800080;">$dbh</span>-><span style="color: #008080;">exec</span>("UPDATE contactInfo set departmentID = 'D02' where uid=1"<span style="color: #000000;">);
    </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$affected_rows</span> > 0<span style="color: #000000;">) {
        </span><span style="color: #0000ff;">echo</span> "张三转岗成功!<br>"<span style="color: #000000;">;
    } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
        </span><span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> PDOException("张三转岗失败!<br>"<span style="color: #000000;">);
    }
    </span><span style="color: #800080;">$affected_rows</span> = <span style="color: #800080;">$dbh</span>-> <span style="color: #008080;">exec</span>("UPDATE contactInfo set departmentID = 'D01' where uid=2"<span style="color: #000000;">);
    </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$affected_rows</span><span style="color: #000000;">) {
        </span><span style="color: #0000ff;">echo</span> "李四转岗成功!<br>"<span style="color: #000000;">;
    }</span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
        </span><span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> PDOException("李四转岗失败!<br>"<span style="color: #000000;">);
    }
    </span><span style="color: #0000ff;">echo</span> "轮岗成功!<br>"<span style="color: #000000;">;
    </span><span style="color: #008000;">//</span><span style="color: #008000;">提交以上的操作</span>
    <span style="color: #800080;">$dbh</span>-><span style="color: #000000;">commit();    
}</span><span style="color: #0000ff;">catch</span>(PDOException <span style="color: #800080;">$e</span><span style="color: #000000;">) {
    </span><span style="color: #0000ff;">echo</span> "错误:".<span style="color: #800080;">$e</span>-><span style="color: #000000;">getMessage();
    </span><span style="color: #0000ff;">echo</span> "转岗失败!<br>"<span style="color: #000000;">;
    </span><span style="color: #008000;">//</span><span style="color: #008000;">撤销所有操作</span>
    <span style="color: #800080;">$dbh</span> -><span style="color: #000000;"> rollback();
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">运行完成以后, 最后开启自动提交</span>
<span style="color: #800080;">$dbh</span>-> setAttribute(PDO::ATTR_AUTOCOMMIT, 1<span style="color: #000000;">);
</span>?>
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)