国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Jadual Kandungan
目錄
前面的話
創(chuàng)建PDO對象
使用PDO對象
事務處理
Rumah php教程 php手冊 前端學PHP之PDO基礎操作

前端學PHP之PDO基礎操作

Dec 05, 2016 pm 01:26 PM

×
目錄
[1]創(chuàng)建PDO [2]使用PDO [3]事務處理

前面的話

  PDO(php data object)擴展類庫為php訪問數(shù)據(jù)庫定義了輕量級的、一致性的接口,它提供了一個數(shù)據(jù)庫訪問抽象層,這樣,無論使用什么數(shù)據(jù)庫,都可以通過一致的函數(shù)執(zhí)行查詢和獲取數(shù)據(jù),大大簡化了數(shù)據(jù)庫的操作,并能夠屏蔽不同數(shù)據(jù)庫之間的差異,使用PDO可以很方便地進行跨數(shù)據(jù)庫程序的開發(fā),以及不同數(shù)據(jù)庫間的移植,是將來php在數(shù)據(jù)庫處理方面的主要發(fā)展方向,它可以支持mysql、postgresql、oracle、mssql等多種數(shù)據(jù)庫

?

創(chuàng)建PDO對象

  使用PDO在與不同數(shù)據(jù)庫管理系統(tǒng)之間交互時,PDO對象中的成員方法是統(tǒng)一各種數(shù)據(jù)庫的訪問接口,所以在使用PDO與數(shù)據(jù)庫進行交互之前,首先要創(chuàng)建一個PDO對象。在通過構造方法創(chuàng)建對象的同時,需要建立一個與數(shù)據(jù)庫服務器的連接,并選擇一個數(shù)據(jù)庫

  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> ]]] )

  在構造方法中,第一個必選的參數(shù)是數(shù)據(jù)源名(dsn),用來定義一個確定的數(shù)據(jù)庫和必須用到的驅動程序。DSN的PDO命名慣例為PDO驅動程序的名稱,后面為一個冒號,再后面是可選的驅動程序的數(shù)據(jù)庫連接變量信息,如主機名、端口和數(shù)據(jù)庫名

  構造方法中的第二個參數(shù)username和第三個參數(shù)password分別指定用于連接數(shù)據(jù)庫的用戶名和密碼。最后一個參數(shù)driver_options需要一個數(shù)組,用來指定連接所需的所有額外選項,傳遞附加的調(diào)優(yōu)參數(shù)到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數(shù)據(jù)庫的DSN </span>
<span style="color: #800080;">$user</span> = 'root'; <span style="color: #008000;">//</span><span style="color: #008000;">MySQL數(shù)據(jù)庫的用戶名</span>
<span style="color: #800080;">$password</span> = '*****'; <span style="color: #008000;">//</span><span style="color: #008000;">MySQL數(shù)據(jù)庫的密碼</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> '數(shù)據(jù)庫連接失敗: ' . <span style="color: #800080;">$e</span>-><span style="color: #000000;">getMessage(); 
}</span>

  在創(chuàng)建PDO對象時,有一些與數(shù)據(jù)庫連接相關的選項,可以將必要的幾個選項組成數(shù)據(jù)傳遞給構造方法的第四個參數(shù)driver_opts中,用來傳遞附加的調(diào)優(yōu)參數(shù)到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;"> 與連接狀態(tài)相關特有信息: 
 PDO</span>::ATTR_ORACLE_NULLS):<span style="color: #000000;"> 空字符串轉換為SQL的null 
 PDO</span>::ATTR_PERSISTENT):<span style="color: #000000;"> 應用程序提前獲取數(shù)據(jù)大 
 PDO</span>::ATTR_SERVER_INFO):<span style="color: #000000;"> 與數(shù)據(jù)庫特有的服務器信 
 PDO</span>::ATTR_SERVER_VERSION):<span style="color: #000000;"> 數(shù)據(jù)庫服務器版本號信息
 PDO</span>::ATTR_CLIENT_VERSION): 數(shù)據(jù)庫客戶端版本號信息 
<span style="color: #008000;">//</span><span style="color: #008000;">設置持久連接的選項數(shù)組作為最后一個參數(shù),可以一起設置多個元素 </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> "數(shù)據(jù)庫連接失敗: " .<span style="color: #800080;">$e</span>-><span style="color: #000000;">getMessage(); 
}</span>

?

使用PDO對象

調(diào)整PDO的行為屬性

  在PDO對象中有很多屬性用來調(diào)整PDO的行為或獲取底層驅動程序狀態(tài)。如果在創(chuàng)建PDO對象時,沒有在構造方法中最后一個參數(shù)過屬性選項,也可以在對象創(chuàng)建完成之后,通過PDO對象中的setAttribute()和getAttribute()方法設置和獲取這些屬性的值

PDO::getAttribute()

  PDO::getAttribute()用于取回一個數(shù)據(jù)庫連接的屬性

<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與連接狀態(tài)相關特有信息: ". <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應用程序提前獲取數(shù)據(jù)大?。?quot;.<span style="color: #800080;">$dbh</span>->getAttribute(PDO::<span style="color: #000000;">ATTR_PERSISTENT); 
</span><span style="color: #0000ff;">echo</span> "\n與數(shù)據(jù)庫特有的服務器信息:".<span style="color: #800080;">$dbh</span>->getAttribute(PDO::<span style="color: #000000;">ATTR_SERVER_INFO); 
</span><span style="color: #0000ff;">echo</span> "\n數(shù)據(jù)庫服務器版本號信息:". <span style="color: #800080;">$dbh</span>->getAttribute(PDO::<span style="color: #000000;">ATTR_SERVER_VERSION);
</span><span style="color: #0000ff;">echo</span> "\n數(shù)據(jù)庫客戶端版本號信息:". <span style="color: #800080;">$dbh</span>->getAttribute(PDO::ATTR_CLIENT_VERSION); 

錯誤處理

  PDO一共提供了三種不同的錯誤處理模式,不僅可以滿足不同風格的編程,也可以調(diào)整擴展處理錯誤的方式

PDO:ERRORMODE_SILENT

  這是默認模式,在錯誤發(fā)生時不進行任何操作,PDO將只設置錯誤代碼。開發(fā)人員可以通過PDO對象中的errorCode()和errorInfo()方法對語句和數(shù)據(jù)庫對象進行檢查。如果錯誤是由于對語句對象的調(diào)用而產(chǎn)生的,那么可以在那個語句對象上調(diào)用errorCode()或errorInfo()方法。如果錯誤是由于調(diào)用數(shù)據(jù)庫對象而產(chǎn)生的,那么可以在那個數(shù)據(jù)庫對象上調(diào)用上述兩個方法

PDO:ERRMODE_WARNING

  除了設置錯誤代碼以外,PDO還將發(fā)出一條PHP傳統(tǒng)的E_WARNING消息,可以使用常規(guī)的PHP錯誤處理程序捕獲該警告。如果只是想看看發(fā)生了什么問題,而無意中斷應用程序的流程,那么在調(diào)試或測試中這種設置很有用

<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,并設置其屬性,以反映錯誤代碼和錯誤信息。這種設置在調(diào)試中也很有用,因為它會放大腳本中產(chǎn)生錯誤的地方,從而可以非常快速地指出代碼中有問題的潛在區(qū)域。異常模式另一個有用的地方是,與傳統(tǒng)的PHP風格的警告相比,可以更清晰地構造自己的錯誤處理,而且,比起以寂靜方式及顯式檢查每個數(shù)據(jù)庫調(diào)用的返回值,異常模式代碼及嵌套代碼也更少

<span style="color: #800080;">$dbh</span>->setAttrbute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);<span style="color: #008000;">//</span><span style="color: #008000;">設置異常模式處理錯誤</span>

執(zhí)行SQL語句

  在使用PDO執(zhí)行查詢數(shù)據(jù)之前,先提供一組相關的數(shù)據(jù)。創(chuàng)建PDO對象并通過mysql驅動連接mysql數(shù)據(jù)庫服務器,創(chuàng)建一個以'testdb'命名的數(shù)據(jù)庫,并在該數(shù)據(jù)庫中創(chuàng)建一個聯(lián)系人信息表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>

  數(shù)據(jù)表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()函數(shù)執(zhí)行一條SQL語句,并返回受影響的行數(shù)

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

  當執(zhí)行INSERT、UPDATE、DELETET等沒有結果集的查詢時,使用PDO對象中的exec()方法去執(zhí)行。該方法成功執(zhí)行后,將返回受影響的行數(shù)

<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;">創(chuàng)建對象</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> "數(shù)據(jù)庫連接失?。?quot;.<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;">數(shù)據(jù)表contactInfo中受影響的行數(shù)為:1</span>
    <span style="color: #0000ff;">echo</span> '數(shù)據(jù)表contactInfo中受影響的行數(shù)為:' .<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;">數(shù)據(jù)表contactInfo中受影響的行數(shù)為:2</span>
    <span style="color: #0000ff;">echo</span> '數(shù)據(jù)表contactInfo中受影響的行數(shù)為:' .<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()函數(shù)用于返回最后插入行的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;">創(chuàng)建對象</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> "數(shù)據(jù)庫連接失?。?quot;.<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()

  當執(zhí)行返回結果集的SELECT查詢時,或者所影響的行數(shù)無關緊要時,應當使用PDO對象中的query()方法。如果該方法成功執(zhí)行指定的查詢,則返回一個PDOStatement對象。如果使用了query()方法,并想了解獲取的數(shù)據(jù)行總數(shù),可以使用PDOStatement對象中的rowCount()方法獲取

PDOStatement::rowCount()

  PDOStatement::rowCount()函數(shù)返回受上一個 SQL 語句影響的行數(shù)

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;">創(chuàng)建對象</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> "數(shù)據(jù)庫連接失?。?quot;.<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>?>

?

事務處理

  事務是確保數(shù)據(jù)庫一致的機制,是一個或一系列的查詢,作為一個單元的一組有序的數(shù)據(jù)庫操作。如果組中的所有SQL語句都操作成功,則認為事務成功,事務則被提交,其修改將作用于所有其他數(shù)據(jù)庫進程。即使在事務的組中只有一個環(huán)節(jié)操作失敗,事務也不成功,則整個事務將被回滾,該事務中所有操作都被取消。事務功能是企業(yè)級數(shù)據(jù)庫的一個重要部分,因為很多業(yè)務過程都包括多個步驟。如果任何一個步驟失敗,則所有步驟都不應發(fā)生。事務處理有4個特征:原子性(Atomicity)、一致性(Consistency)、獨立性(Isolation)和持久性(Durability),即ACID。對于在一個事務中執(zhí)行的任何工作,即使它是分階段進行的,也一定可以保證該工作會安全地應用于數(shù)據(jù)庫,并且在工作被提交時,不會受到其他連接的影響

  MySQL目前只有InnoDB和BDB兩個數(shù)據(jù)庫表類型才支持事務,兩個表類型具有相同的特性,InnoDB表類型具有比BDB還豐富的特性,速度更快,因此建議使用InnoDB表類型。創(chuàng)建InnoDB類型的表實際上與創(chuàng)建任何其他類型表的過程沒有區(qū)別,如果數(shù)據(jù)庫沒有設置為默認的表類型,只要在創(chuàng)建時顯式指定要將表創(chuàng)建為InnoDB類型

  要實現(xiàn)事務處理,首先要使用InnoDB引擎

ALTER TABLE contactInfo engine=innodb;

  在默認的情況下,MySQL是以自動提交(autocommit)模式運行的,這就意味著所執(zhí)行的每一個語句都將立即寫入數(shù)據(jù)庫中。但如果使用事務安全的表格類型,是不希望有自動 提交的行為的,所以要在當前的會話中關閉自動提交

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;">提交一個事務給數(shù)據(jù)庫</span>

  如果改變注意,可以回滾到以前的狀態(tài)

ROOLBACK;<span style="color: #008000;">//</span><span style="color: #008000;">事務被回滾,所有操作都被取消</span>

  事務處理完成后,再次開啟自動提交

SET AUTOCOMMIT = 1;

  下面在PHP中進行事務處理操作,對張三和李四進行部門交換來輪崗培養(yǎng)

<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;">創(chuàng)建對象</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> "數(shù)據(jù)庫連接失?。?quot;.<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>?>
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276