pdo用法學習筆記_PHP教程

來源:互聯網
上載者:User
一、 基本概念

1、 PDO:PHP Data Object的縮寫。PDO擴充類庫為PHP定義了一個輕量級的、一致性的介面,它提供了一個資料訪問抽象層,這樣無論使用什麼資料庫,都可以通過一致的函數執行查詢和擷取資料。

PDO就是一個“資料庫訪問抽象層”,作用是統一各種資料庫的提供者。

2、 對任何資料庫的操作,並不是使用PDO擴充本身執行的,必須針對不同的資料庫伺服器使用特定的PDO驅動程式訪問。如:MYSQL(PDO_MYSQL)。可以在phpinfo()函數中查看PDO部分的列表。

二、PDO的安裝

1、Linux:安裝PHP時,向configure命令中添加如下標誌:

–with-pdo-mysql=/usr/local/mysql //其中/usr/local/mysql為mysql安裝目錄

2、Windows:

在C:windows下找到php.ini檔案

(1)開啟:extension=php_pdo.dll

(2)開啟:extension=php_pdo_mysql.dll

三、使用PDO過程

1、串連資料庫

(1)建立PDO對象

(2)設定PDO行為屬性(setattribute())

(3)設定字元集($link->query(‘set names UTF8’))

2、發送SQL語句

(1)準備SQL語句

(2)執行發送

3、查看結果

四、串連資料庫

1、建立PDO對象:

(1)$link = new PDO(DSN, 使用者名稱, 密碼, 驅動屬性);

1)DSN:資料來源名,用來定義一個必須用到的驅動程式和要使用的資料庫。mysql的DSN格式:’mysql:host=localhost;dbname=lamp30’

2)可以將DSN放到檔案裡,如:’uri:file:///usr/local/dsn.txt’

3)建立對象時要使用try…catch語句,因為在聲明PDO執行個體發生錯誤時,會自動拋出一個異常。如:

代碼如下 複製代碼

try{

$link = new PDO(‘mysql:host=localhost;dbname=lamp30’,’root’,’111111’);

}catch(PDOException $e){

echo $e->getMessage();

exit(‘串連資料庫錯誤.’);

}

2、驅動屬性

(1)可以將必要的幾個選項組成數組(屬性名稱作為元素鍵,屬性值作為元素值)傳遞給構造方法的第四個參數。如果沒有在構造方法中定義驅動屬性,可以在之後使用PDO類的setattribute()函數定義各個屬性。

(2)書P501頁有這些屬性中文釋義。

3、設定字元集:$link->query(‘set names UTF8’)

五、發送SQL語句

(1)$link->exec():執行增刪改,返回受影響行數,執行失敗返回false或0。

(2)$link->query():執行查詢,返回PDOStatement結果集對象。

六、查詢結果

1、非查詢:

(1)直接用$link->exec()的返回影響行數

(2)$link->lastInsertId()返回最後一條INSERT命令產生的AUTO_INCREMENT編號值

2、見預先處理

七、預先處理

1、第二步:發送SQL語句

代碼如下 複製代碼

$stmt = $link->prepare(‘select * from user where id=:id’);

$stmt->bindparam(‘:id’, $id, PDO::PARAM_INT);

$id = 2;

$stmt->execute();

bindParam()參數有以下7種:可以不用寫

PDO::PARAM_INT

PDO::PARAM_STR

PDO::PARAM_BOOL

PDO::PARAM_NULL

PDO::PARAM_LOB:大對象資料類型

PDO::PARAM_STMT:PDOstatement類型

PDO::PARAM_INPUT_OUTPUT:預存程序使用的資料類型

2、第三步:

如:

代碼如下 複製代碼

$stmt = $link->query(‘select * from user’);

(1)fetch()方法

$pdoStat ->bindColumn(1, $id); //第一個參數可以是從1開始的索引值

$pdoStat ->bindColumn(‘name’, $name); //也可以是列名

$pdoStat ->bindColumn(‘pass’, $pass);

while($row = $stmt ->fetch(PDO::FETCH_BOUND)){

echo $id.’ ’;

echo $name.’ ’;

echo $pass.’
’;

}

fetch()參數有六種:見手冊。

可以用setFetchMode()方法設定預設模式。

(2)fetchall()方法

代碼如下 複製代碼

$result = $stmt ->fetchall();

foreach($result as $row){

echo $row[‘id’].’ ’;

echo $row[‘name’].’ ’;

echo $row[‘pass’].’
’;

}

Fetchall()參數與fetch()相同。

八、交易處理

1、關閉自動認可(在驅動屬性中修改)

2、開啟事務

3、提交事務/復原

4、開啟自動認可

如:

代碼如下 複製代碼

$link = new PDO(‘mysql:host=localhost;dbname=lamp30’);

//1

$link->setattribute(PDO::ATTR_AUTOCOMMIT, false);

//2

$link->begintransaction();

$result = $link->exec(‘insert into user(name,paa) values(‘wsy’,’111’)’);

//3

if($result){

$link->commit();

}else{

$link->rollback();

}

//4

$link->setattribute(PDO::ATTR_AUTOCOMMIT, true);

九、PDO對象中的成員方法

1、$link->getattribute(屬性名稱):擷取一個驅動屬性。

2、$link->setattribute(屬性名稱,屬性值):設定一個驅動屬性。

1)因oracle把Null 字元串返回為NULL值,而其它資料庫無此特性,為了有更好的相容性$link->setattribute(PDO::ATTR_ORACLE_NULLS ,PDO::NULL_EMPTY_STRING,);

2)有三種顯示錯誤的方式:靜態、WARNING訊息、異常

3、$link->errorcode():擷取錯誤碼。

1)如setattribute函數設定顯示錯誤方式為靜態,則出現錯誤時什麼都不顯示,必須調用此函數,才能查看錯誤號碼。

4、$link->errorinfo():擷取錯誤資訊(數組)。

1)如setattribute函數設定顯示錯誤方式為靜態,則出現錯誤時什麼都不顯示,必須調用此函數,才能查看錯資訊。

5、$link->lastinsertid():擷取插入到表中的最後一條資料主索引值(如有多條資料同時插入,返回第一個插入行的ID)。

6、$link->prepare():發送準備的SQL語句,返回PDOStatement對象。

7、$link->begintransaction():開啟事務。

8、$link->commit():提交一個事務,執行一個SQL。

9、$link->rollback():復原一個事務。

十、錯誤模式

1、靜態模式:

代碼如下 複製代碼

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT)

(1) 預設模式,在錯誤發生時不進行任何操作,PDO將只設定錯誤碼。

(2) 查看錯誤可以調用errorCode()和errorInfo(),PDO和PDOStatement類都有這兩個方法。

2、警告模式:

代碼如下 複製代碼

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING)

(1)此模式在設定錯誤碼以外,PDO還將發出一條PHP傳統的E_WARNING訊息。

(2)這是mysql和mysqli顯示錯的方式。

3、異常模式:

代碼如下 複製代碼

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)

(1) 此模式在設定錯誤碼以外,PDO還將拋出一個PDOException,並設定其屬性,以反映錯誤碼和錯誤資訊。

(2) 如果異常導致指令碼終止,則事務將自動復原。

(3) PDO推薦使用此模式。

十一、持久串連

代碼如下 複製代碼

$link->setAttribute(PDO::ATTR_PERSISTENT, true);

持久串連即當指令碼執行結束時不會自動中斷連線,而且用$link->close()不能關閉串連。

http://www.bkjia.com/PHPjc/631647.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631647.htmlTechArticle一、 基本概念 1、 PDO:PHP Data Object的縮寫。PDO擴充類庫為PHP定義了一個輕量級的、一致性的介面,它提供了一個資料訪問抽象層,這樣無論...

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.