PDO是別人寫的「數據庫操做工具類」!mysql
1、PDO鏈接Mysql數據庫sql
$DSN = "mysql:host=服務器地址/名稱;port=端口號;dbname=數據庫名";數據庫
$Opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>’set names 鏈接編碼’);數組
$pdo = new pdo($DSN, "用戶名", "密碼", $Opt);服務器
$dns = "mysql:host=localhost;port=3306;dbname=test"; $opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"); $pdo = new PDO($dns, "root", "root", $opt);
2、PDO對象經常使用方法工具
$pdo->query(「返回結果集的sql語句」);返回:結果集或falsefetch
$pdo->exec(「增刪改的sql語句」); 返回:true或false編碼
其餘操做:spa
$pdo->lastInsertId(); 獲取最後添加的id值;code
$pdo->beginTransaction(); 開啓一個事務
$pdo->commit() 提交一個事務
$pdo->rollBack(); 回滾一個事務;
$pdo->inTransaction(); 判斷當前行是否在事務中,返回true/false
$pdo->setAttribute(屬性名,屬性值); 設置pdo對象的屬性值; 舉例:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
3、PDO錯誤處理
默認狀況下,pdo採用「靜默模式」處理錯誤:就是發生了錯誤後,並不提示,而只是返回false。咱們須要在程序中去判斷返回是否爲fale,而後,若是是false,再去「主動」獲取錯誤信息。
設置PDO爲異常模式:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);經過try catch進行異常捕獲處理
//設置爲異常模式 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try{ $sql = "deleteee from test where id = 1"; $pdo->exec($sql); } catch (Exception $e) { echo $e->getCode(); echo $e->getMessage(); }
4、PDO結果集(PDOStatement)
$stmt = $pdo->query(「select ...... 」); //這是得到結果集
$stmt->rowCount() ; //獲得結果集的行數
$stmt->columnCount() ; //獲得結果集的列數
$stmt->fetch( [返回類型] ); //從結果集中取出「一行」數據;
取出的結果,由其中的「返回類型」來決定,經常使用的有:
PDO::FETCH_ASSOC:表示關聯數組
PDO::FETCH_NUM:表示索引數組
PDO::FETCH_BOTH:表示前兩者皆有,這是默認值
PDO::FETCH_OBJ:表示對象
$stmt->fetchAll([返回類型]); 一次性獲取結果集中的全部數據,返回的是一個二維數組,至關於咱們本身寫的GetRows()
$stmt->fetchColumn( [$i] ); 獲取結果集中的「下一行」數據的第$i個字段的值,結果是一個「標量數據」,至關於咱們本身的寫的:GetOneData()
$stmt->fetchObject();
$stmt->errorCode();: pdo結果集的錯誤代號
$stmt->errorInfo(); pdo結果集的錯誤信息(是一個數組)
$stmt->closeCursor(); 關閉結果集(至關於mysql_close() )
5、PDO預處理
語法1:
$sql = 「select * from tab where id = ? 「; //這裏這個「?」就是未給定的數據項;這裏一般叫作「佔位符」 //也能夠是多個問好。
語法2:
$sql = 「select * from tab where id = :v1 and name = :v2 「; //這裏這個「:v1」和 「:v2」 就是未給定的數據項;一般這裏叫作「命名參數」;
1,對含預處理語法的sql語句進行「預處理」:
$stmt = $pdo->prepare( $sql );
2, 對上述預處理的結果對象($stmt)的未賦值數據,進行賦值:
$stmt->bindValue( 數據項1, 值1);
$stmt->bindValue( 數據項2, 值2);
3, 執行執行:
$stmt->execute();
$stmt = $pdo->prepare("insert into test (name, age) values (?, ?)"); $stmt->bindValue(1, "yy"); $stmt->bindValue(2, 19); $stmt->execute();
$stmt = $pdo->prepare("select * from test where id = :v1"); $stmt->bindValue(":v1", 1); $stmt->execute(); $arr = $stmt->fetch(PDO::FETCH_ASSOC); var_dump($arr);