PHP物件導向07_PDO
oop007複習
2014-9-4 9:42:28
摘要:
1、pdo的作用
2、pdo的安裝
3、pdo連線屬性設定
4、pdo物件和PDOStatement物件
5、pdo預處理
6、pdo事務機制
1、pdo的作用
簡介:
PDO(php data object)擴充套件類庫為php訪問資料庫定義了輕量級的、一致性的介面,它提供了一個資料庫訪問抽象層.
這樣,無論你使用什麼資料庫,都可以通過一致的函式執行查詢和獲取資料.
PDO大大簡化了資料庫的操作並能夠遮蔽不同資料庫之間的差異.
使用pdo可以很方便地進行跨資料庫程式的開發,以及不同資料庫間的移植,是將來php在資料庫處理方面的主要發展方向.
它可以支援mysql,postgresql,oracle,mssql等多種資料庫.
舉例說明:
假如我們做了個專案,使用的是mysql,如果是程式導向運算元據庫,那麼,基本上所有的資料庫函式都是mysql_形式.
現在我們突然要換資料庫了,比如pgsql.而pgsql資料庫函式基本是pg_形式.
並且二者部分函式是互相不存在的,都有各自的”擴充套件函式”.
那麼這時候改專案就比較複雜了.
但是如果我們使用的是pdo運算元據庫,一切都簡單了.
使用mysql,我們只需在連線的時候這樣定義:
$m=new PDO("mysql:host=localhost;dbname=test","root","123");
使用pgsql,我們只需在連線的時候這樣定義:
$m=new PDO("pgsql:host=localhost;port=5432;dbname=test","postgres","123");
其它的操作都是一樣的,比如查詢都是stmt=m->query(sql),遍歷都是stmt->fetchAll();
一切都變簡單了.PDo還提供了預處理和事務支援.
2、pdo的安裝
[windows環境]
01) 編輯php.ini檔案:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
02)重啟apache服務:
httpd –k restart
03)開啟phpinfo.php檢視是否有pdo、pdo_mysql
[Linux環境(CentOS6.0)]
一般步驟是:
1 tar -zxvf PDO_MYSQL-1.0.2.tgz
2 cd PDO_MYSQL-1.0.2
3 /usr/local/php/bin/phpize
4 ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql
5 make
6 make install
編輯php.ini,新增
注:$ext_dir為擴充套件目錄名字,例如no-debug-zts-20060613
extension_dir=/usr/local/php/lib/php/extensions/$ext_dir
extension=pdo_mysql.so
然後重啟伺服器即可.
3、pdo連線屬性設定
*連線資料庫格式:
PDO::__construct ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )
01)連線mysql
$m=new PDO("mysql:host=localhost;dbname=test","root","123");
02)連線pgsql
$m=new PDO("pgsql:host=localhost;port=5432;dbname=test","postgres","123");
03)連線Oracle
$m=new PDO("OCI:dbname=accounts;charset=UTF-8", "scott", "tiger");
*不過,一般都是採用異常處理方式連線,例如 :
try{
$m=new PDO("mysql:host=localhost;dbname=test","root","123");
}catch(PDOException $e){
die(`資料庫連線失敗:` . $e->getMessage());
}
*PDO與連線有關的選項
PDO::ATTR_ERRMODE
PDO::ERRMODE_SILENT 0 忽略錯誤模式
PDO::ERRMODE_WARNING 1 警告級別模式
PDO::ERRMODE_EXCEPTION 2 異常處理模式
PDO::ATTR_AUTOCOMMIT
//關閉自動提交
//開啟自動提交
PDO::ATTR_DEFAULT_FETCH_MODE
PDO::FETCH_ASSOC 2
PDO::FETCH_NUM 3
PDO::FETCH_BOTH 4
PDO::FETCH_OBJ 5
例如:
$option=array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION);
$m=new PDO("mysql:host=localhost;dbname=test","root","123",$option);
或者更通用的設定屬性方式:
$m->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//設定異常處理方式
$m->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);//設定預設關聯索引遍歷
常見PDO屬性輸出:
echo "
PDO是否關閉自動提交功能:". $m->getAttribute(PDO::ATTR_AUTOCOMMIT);
echo "
當前PDO的錯誤處理的模式:". $m->getAttribute(PDO::ATTR_ERRMODE);
echo "
表欄位字元的大小寫轉換: ". $m->getAttribute(PDO::ATTR_CASE);
echo "
與連線狀態相關特有資訊: ". $m->getAttribute(PDO::ATTR_CONNECTION_STATUS);
echo "
空字串轉換為SQL的null:". $m->getAttribute(PDO::ATTR_ORACLE_NULLS);
echo "
應用程式提前獲取資料大小:".$m->getAttribute(PDO::ATTR_PERSISTENT);
echo "
與資料庫特有的伺服器資訊:".$m->getAttribute(PDO::ATTR_SERVER_INFO);
echo "
資料庫伺服器版本號資訊:". $m->getAttribute(PDO::ATTR_SERVER_VERSION);
echo "
資料庫客戶端版本號資訊:". $m->getAttribute(PDO::ATTR_CLIENT_VERSION);
*字符集設定
設定php連線mysql時的客戶端字串和連線字串集為:
$pdo->exec("set names utf8");
或者:
$pdo->query("set names utf8");
4、PDO物件和PDOStatement物件
01)pdo物件中的成員方法
1.PDO::beginTransaction — 啟動一個事務
2.PDO::commit — 提交一個事務
3.PDO::__construct — 建立一個表示資料庫連線的 PDO 例項
4.PDO::errorCode — 獲取跟資料庫控制程式碼上一次操作相關的 SQLSTATE
5.PDO::errorInfo — 獲取錯誤資訊
6.PDO::exec — 執行一條 SQL 語句,並返回受影響的行數
7.PDO::getAttribute — 取回一個資料庫連線的屬性
*8.PDO::getAvailableDrivers — 返回一個可用驅動的陣列(瞭解即可)
*9.PDO::inTransaction — 檢查是否在一個事務內(瞭解即可)
10.PDO::lastInsertId — 返回最後插入行的ID或序列值
11.PDO::prepare — 建立SQL的預處理,返回PDOStatement物件
12.PDO::query — 用於執行查詢SQL語句,返回PDOStatement物件
13.PDO::quote — 為sql字串新增單引號
14.PDO::rollBack — 回滾一個事務
15.PDO::setAttribute — 設定屬性
pdo::query()方法
當執行返回結果集的select查詢時,或者所影響的行數無關緊要時,應當使用pdo物件中的query()方法.
如果該方法成功執行指定的查詢,則返回一個PDOStatement物件.
如果使用了query()方法,並想了解獲取資料行總數,可以使用PDOStatement物件中的rowCount()方法獲取
pdo::exec()方法
當執行insert,update,delete沒有結果集的查詢時,使用pdo物件中的exec()方法去執行.
該方法成功執行時,將返回受影響的行數.注意,該方法不能用於select查詢.
——————————————————————————————-
示例:
<?php
try{
$m=new PDO("mysql:host=localhost;dbname=test","root","123");
}catch(PDOException $e){
die(`資料庫連線失敗:` . $e->getMessage());
}
$stmt=$m->query("select * from stu");//返回PDOStatement物件$stmt
echo $stmt->rowCount();
?>
——————————————————————————————-
02)PDOStatement物件中的成員方法
1.PDOStatement::bindColumn — 繫結一列到一個 PHP 變數(*)
2.PDOStatement::bindParam — 繫結一個引數到指定的變數名(*)
3.PDOStatement::bindValue — 把一個值繫結到一個引數(*)
4.PDOStatement::closeCursor — 關閉遊標,使語句能再次被執行。
5.PDOStatement::columnCount — 返回結果集中的列數
6.PDOStatement::debugDumpParams — 列印一條 SQL 預處理命令
7.PDOStatement::errorCode — 獲取跟上一次語句控制程式碼操作相關的 SQLSTATE(*)
8.PDOStatement::errorInfo — 獲取跟上一次語句控制程式碼操作相關的擴充套件錯誤資訊(*)
9.PDOStatement::execute — 執行一條預處理語句(*)
10.PDOStatement::fetch — 從結果集中獲取下一行(*)
11.PDOStatement::fetchAll — 返回一個包含結果集中所有行的陣列(*)
12.PDOStatement::fetchColumn — 從結果集中的下一行返回單獨的一列。
13.PDOStatement::fetchObject — 獲取下一行並作為一個物件返回。
14.PDOStatement::getAttribute — 檢索一個語句屬性(*)
15.PDOStatement::getColumnMeta — 返回結果集中一列的後設資料
16.PDOStatement::nextRowset — 在一個多行集語句控制程式碼中推進到下一個行集
17.PDOStatement::rowCount — 返回受上一個 SQL 語句影響的行數(*)
18.PDOStatement::setAttribute — 設定一個語句屬性(*)
19.PDOStatement::setFetchMode — 為語句設定預設的獲取模式。
注:(*)表示必須會使用的方法.
5、pdo預處理
準備一條SQL語句使用PDOStatement::execute()方法執行.
預處理SQL語句可以使用包含零或多個命名為(:name)或者以?號標記為(?)的形式.例如
$stmt=$m->prepare("insert into stu(name,age,sex,classid)values(?,?,?,?)");
$stmt=$m->prepare("insert into stu(name,age,sex,classid)values(:name,:age,:sex,:classid)");
預處理的好處是可以防止SQL隱碼攻擊、更快執行效率支援批量操作.
6、pdo事務機制
概要:將多條sql操作(增刪改)作為一個操作單元,要麼都成功,要麼都失敗.
單條資料不用事務處理
相關文章
- PHP物件導向PHP物件
- PHP 物件導向 (九)物件導向三大特徵PHP物件特徵
- PHP物件導向(三)PHP物件
- php中的程式導向與物件導向PHP物件
- PHP 物件導向 (十)TraitsPHP物件AI
- PHP物件導向之&引用PHP物件
- PHP學習4——物件導向PHP物件
- PHP 核心技術 --物件導向PHP物件
- PHP 物件導向基礎概念PHP物件
- PHP 物件導向 (十一)反射類PHP物件反射
- 物件導向-物件導向思想物件
- PHP物件導向(OOP)—-分頁類PHP物件OOP
- PHP MySQL (三)物件導向 事務PHPMySql物件
- PHP 物件導向 (二)類屬性PHP物件
- PHP 物件導向 (五)靜態方法PHP物件
- PHP 物件導向 (六)魔術方法PHP物件
- PHP基礎之物件導向篇PHP物件
- php基礎語法_物件導向PHP物件
- 【物件導向的PHP】之模式:目錄物件PHP模式
- 淺談PHP物件導向程式設計PHP物件程式設計
- PHP 物件導向 (三)名稱空間PHP物件
- PHP基礎之物件導向講解PHP物件
- PHP中物件導向的分頁類PHP物件
- 2021-PHP面試題大全-物件導向PHP面試題物件
- 物件導向與程式導向物件
- 程式導向與物件導向物件
- “程序導向”和“物件導向”物件
- PHP 物件導向 (四)類物件賦值為引用傳遞PHP物件賦值
- PHP 物件導向 - 物件的淺拷貝與深拷貝PHP物件
- 物件導向物件
- 物件導向,搞定物件物件
- JAVA物件導向基礎--物件導向介紹Java物件
- PHP 物件導向 (一)許可權修飾符PHP物件
- PHP 物件導向 (八)類的自動載入PHP物件
- 看完就能掌握的PHP核心技術 - 物件導向PHP物件
- php物件導向知識 this,self,parent的區別PHP物件
- 2020PHP面試題大全【物件導向部分】PHP面試題物件
- 物件導向 -- 反射物件反射
- JavaScript 物件導向JavaScript物件