목차
목차
이전 단어
PDO 객체 생성
PDO 객체 사용
事务处理
php教程 php手册 PHP의 프론트엔드 학습 PDO 기본 동작

PHP의 프론트엔드 학습 PDO 기본 동작

Dec 05, 2016 pm 01:26 PM

×
목차
[1] PDO 생성 [2] PDO 사용 [3] 트랜잭션 처리

이전 단어

PDO(php 데이터 객체) 확장 클래스 라이브러리는 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 드라이버 이름, 콜론, 호스트 이름, 포트 및 데이터베이스 이름과 같은 선택적 드라이버 데이터베이스 연결 변수 정보입니다.

생성 메소드의 두 번째 매개변수인 사용자 이름과 세 번째 매개변수인 비밀번호는 각각 데이터베이스에 연결하는 데 사용되는 사용자 이름과 비밀번호를 지정합니다. 마지막 매개변수인 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는 총 3가지 오류 처리 모드를 제공하여 다양한 프로그래밍 스타일을 충족할 수 있을 뿐만 아니라 오류 처리 방식을 조정 및 확장할 수 있습니다.

PDO:ERRORMODE_SILENT

이는 기본 모드이며 오류 발생 시 아무런 조치도 취하지 않으며 PDO는 오류 코드만 설정합니다. 개발자는 PDO 객체의 errorCode() 및 errorInfo() 메소드를 통해 명령문 및 데이터베이스 객체를 확인할 수 있습니다. 명령문 객체 호출로 인해 오류가 발생하는 경우 해당 명령문 객체에서 errorCode() 또는 errorInfo() 메서드를 호출할 수 있습니다. 데이터베이스 개체를 호출하여 오류가 발생한 경우 해당 데이터베이스 개체에 대해 위의 두 메서드를 호출할 수 있습니다.

PDO:ERRMODE_WARNING

오류 코드 설정 외에도 PDO는 일반 PHP 오류 핸들러를 사용하여 포착할 수 있는 PHP 기존 E_WARNING 메시지도 내보냅니다. 이 설정은 실수로 애플리케이션 흐름을 중단하지 않고 무엇이 잘못되었는지 확인하려는 경우 디버깅 또는 테스트에 유용합니다

<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 스타일 경고보다 더 명확하게 자체 오류 처리를 구성할 수 있으며 각 데이터베이스 호출의 반환 값을 자동으로 명시적으로 확인하는 대신 예외 패턴 Less code and lessnested code

<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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)