[TOC]
>[success]PDO擴展為PHP訪問數據庫定義了一個輕量級的、一致性的接口,它 提供了一個數據訪問抽象層,這樣,無論使用什么數據庫,都可以通 過一致的函數執行查詢和獲取數據。PDO隨PHP5.1發行
PHP通過PDO擴展動態加載相應的數據庫驅動程序來完成直接操作各 種數據庫,所以在使用PDO時要明確告知所要使用的數據庫驅動
## 查看是否支持
通過phpinfo()查看是否成功加載
>[danger]注意:如果沒加載,可以去php.ini看是否開啟該擴展,如果前面有分號去掉。
注意:如果沒有該擴展,百度"php pdo擴展安裝",有很多場景下的解決方案。
## pdo的使用
### 通過PDO連接MYSQL
~~~
$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
~~~
通過PDO類產生一個連接對象
### 發送執行sql(針對select)
~~~
PDO::query ( string $statement )
~~~
通過查詢,返回一個結果集對象
### 發關操作sql(針對UPDATE,DELETE,INSERT)
~~~
int PDO::exec ( string $statement )
~~~
執行一條 SQL 語句,并返回受影響的行數
### 取結果集中的數據
~~~
$result->fetchAll(PDO::FETCH_ASSOC)只得到關聯方式的數據
$result->fetchAll(PDO::FETCH_NUM)得到索引表示記錄
$result->fetchAll(PDO::FETCH_BOTH)得到關聯與索引表示的數據
$result->fetchAll(PDO::FETCH_OBJ)得到以對象形式表示的數據
$result->fetch($type)從結果集中獲取下一行
~~~
### 錯誤代碼
~~~
mixed PDO::errorCode ( void )
~~~
獲取跟數據庫句柄上一次操作相關的 SQLSTATE
### 錯誤信息
~~~
public array PDO::errorInfo ( void )
~~~
獲取跟數據庫句柄上一次操作錯誤信息
### 自增id
~~~
string PDO::lastInsertId ([ string $name = NULL ] )
~~~
返回最后插入行的ID或序列值
**完整實例**
~~~
Excute query with secure data
==============================
<?php
try{
$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
$mysecuredata=14;
$db->query("Select * from table where id=".$mysecuredata);
}catch(PDOException $e ){
echo "Error: ".$e;
}
?>
Excute query with insecure data
==============================
<?php
try{
$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
$myinsecuredata=$_GET["id"];
$query=$db->prepare("Select * from table where id=?");
$query->excute(array($myinsecuredata));
}catch(PDOException $e ){
echo "Error: ".$e;
}
?>
~~~
## Pdo預準備
>[success]預計準備的目的與mysqli預準備的是一樣的,可以減少解析次數和防注入
**實例**
~~~
<?php
/* 通過綁定的 PHP 變量執行一條預處理語句,*/
/*執行一條使用命名占位符的預處理語句 */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>
<?php
/* 通過綁定的 PHP 變量執行一條預處理語句*/
/*執行一條使用問號占位符的預處理語句*/
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>
~~~
>[danger]練習:通過Pdo類,開發一個自己的操作數據庫的類 Model.class.php
- 序言
- 第一章:準備工作
- 寫在學習之前的話
- web應用開發結構
- 開發工具/環境
- 第二章:展現層面(HTML/CSS)
- HTML簡介
- HTML基礎
- HTML編碼
- HTML鏈接
- HTML圖像
- HTML列表
- HTML表單
- HTML表格(分水嶺)
- HTML 實體
- HTML框架
- CSS層疊樣式表
- CSS選擇器
- CSS文本/字體
- CSS繼承和疊加
- CSS框模型
- CSS浮動(分水嶺)
- CSS定位
- CSS背景
- CSS圖標字體
- CSS補充
- 開發技巧
- 第三章:展現層面(Javascript)
- JS簡介
- JS實現
- JS輸出交互
- JS變量
- JS數據類型
- JS運算符
- JS流程控制(分水嶺)
- JS函數
- JS數組
- JS對象(分水嶺)
- JS數組對象
- JS字符串對象
- JS數學對象
- JS日期對象
- JS BOM對象(分水嶺)
- JS DOM對象
- JS事件對象
- JS元素對象
- JS DOM節點
- 第四章:展現層面(Jquery)
- JQ簡介
- JQ使用
- JQ選擇器
- JQ篩選
- JQ屬性
- JQ-CSS
- JQ事件
- JQ文檔處理
- JQ效果
- JQ-ajax
- 第五章:邏輯/業務層面(PHP)
- PHP簡介
- PHP變量
- PHP數據類型
- PHP常量
- PHP運算符
- PHP流程控制
- PHP函數(分水嶺)
- PHP日期
- PHP數學
- PHP數組
- PHP字符串
- PHP正則表達式(分水嶺)
- PHP目錄操作
- PHP文件
- PHP上傳/下載
- PHP面向對象(分水嶺)
- PHP圖像處理
- PHP會話控制
- Ajax異步處理
- PHPMysql擴展
- PHPMysqli擴展
- PHPPdo擴展
- PHP接口
- PHP命名空間
- 第六章:邏輯/業務層面(框架設計)
- 第七章:存儲層面(mysql)
- Mysql基礎
- Mysql Sql簡介
- Mysql數據庫
- Mysql數據類型
- Mysql數據表
- Mysql操作記錄
- Mysql查詢
- Mysql修改表結構
- Mysql日期與時間
- Mysql分組統計
- Mysql多表查詢
- Mysql安全
- Mysql存儲引擎
- Mysql事務
- Mysql視圖
- Mysql觸發器
- Mysql存儲過程
- Mysql存儲函數
- Mysql優化
- 第八章:服務器(Linux)
- Linux介紹與安裝
- Shell
- 目錄與文件操作
- VIM編輯器使用
- 帳號管理
- SUDO
- 權限控制
- 壓縮與打包
- 軟件安裝
- 計劃任務
- 進程管理
- 寶塔Linux面板