PHP 數據對象 (PDO) 擴展爲PHP訪問數據庫定義了一個輕量級的一致接口。php
PDO 提供了一個數據訪問抽象層,這意味着,無論使用哪一種數據庫,均可以用相同的函數(方法)來查詢和獲取數據。html
PDO隨PHP5.1發行,在PHP5.0的PECL擴展中也能夠使用,沒法運行於以前的PHP版本。mysql
pdo功能:sql
1.操做其它數據庫
2.事務功能
3.防止SQL注入攻擊數據庫
操做其餘數據庫:數組
//造PDO對象 $dsn = "mysql:dbname=mydb;host=localhost"; //數據源 $pdo = new PDO($dsn,"root","123"); //root爲鏈接用戶名,123爲密碼 //寫SQL語句 $sql = "select * from nation"; $sql1 = "insert into nation values('n077','數據')"; //執行,返回的是PDOStatement對象 $a = $pdo->query($sql); //執行查詢 $a1 = $pdo->exec($sql1); //執行其餘語句 var_dump($a); var_dump($a1); $arr = $a->fetchAll(PDO::FETCH_BOTH); //遍歷輸出 var_dump($arr);
事務功能:函數
事務:可以控制語句同時成功同時失敗,失敗時能夠回滾:post
$dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","123"); //設置異常模式 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); try { //開啓事務 $pdo ->beginTransaction(); //......中間部分爲數據庫代碼及執行 //提交 $pdo->commit(); } catch(Exception $e) { //抓住try裏面出現的錯誤,而且處理 //echo $e->getMessage(); //獲取異常信息 echo "失敗! "; //回滾 $pdo->rollBack(); } //final() //{ //最終執行,不管以上try代碼有沒有出錯,都會執行 //}
若是cath()中有失敗語句,則回到開啓事務時的狀態。測試
防止SQL注入攻擊:fetch
索引方法:
//預處理語句防止SQL注入 $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","123"); //$code = "n005"; //SQL語句裏面須要加佔位符 ? //$sql = "select * from nation where code=?"; $sql = "insert into nation values(?,?)"; //準備執行,返回PDOStatement對象 $st = $pdo->prepare($sql); //調用綁定參數的方法來綁定參數 //$st->bindParam(1,$code); //$st->bindParam(2,$name); //$name = "測試1"; //索引數組 $attr = array("n006","測試2"); //執行方法 $st->execute($attr); //$attr = $st->fetchAll(); //var_dump($attr);
關聯方法:
$dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","123"); //佔位符是字符串 $sql = "insert into nation values(:code,:name)"; $st = $pdo->prepare($sql); //$st->bindParam(":code",$code,PDO::PARAM_STR); //$st->bindParam(":name",$name,PDO::PARAM_STR); //$code = "n007"; //$name = "測試3"; //關聯數組 $attr = array("code"=>"n008","name"=>"測試4"); $st->execute($attr);
利用關聯方法向數據庫添加數據:
新建添加php文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文檔</title> </head> <body> <form action="addchuli.php" method="post"> <div>代號:<input type="text" name="code" /></div> <div>名稱:<input type="text" name="name" /></div> <input type="submit" value="添加" /> </form> </body> </html>
處理界面:
<?php $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","123"); //佔位符是字符串 $sql = "insert into nation values(:code,:name)"; $st = $pdo->prepare($sql); //$st->bindParam(":code",$code,PDO::PARAM_STR); //$st->bindParam(":name",$name,PDO::PARAM_STR); //$code = "n007"; //$name = "測試3"; $st->execute($_POST); ?>