php中PDO處理mysql 基本操作
0
php通過PDO連接mysql
詳細請參照w3cschool.cc 和 php手冊 PDO模塊 http://php.net/manual/zh/book.pdo.php )
一 :php連接mysql
代碼:
<?php $servername = "127.0.0.1"; $username = "username"; $password = "password"; try { $conn = new PDO("mysql:host=$servername;dbname=mysql", $username, $password); echo "Connected successfully"; } catch(PDOException $e) { echo $e->getMessage(); } ?>
二 :insert,update,delete的語法類似,僅僅以insert為例,將以下代碼扔到try塊中就ok.
代碼:
$sql="insert into test values(1,'a')"; $num=$conn->exec($sql); echo "影響行數 $num";
三: select的語法略微復雜.
代碼:
$sql="select * from test"; $res=$conn->query($sql); foreach($res as $r){ echo $r["id"] . "<br>" //$r是一個array,我們僅僅輸出了id列,可以print_r($r)輸出 }
四 : 還可以使用預處理獲取數據(略懂)
PDO::FETCH_ASSOC:返回一個索引為結果集列名的數組
PDO::FETCH_BOTH(默認):返回一個索引為結果集列名和以0開始的列號的數組
DOStatement::fetch :從結果集中獲取下一行
代碼(摘自php手冊http://php.net/manual/zh/pdostatement.fetch.php)
方法一
<?php $stmt = $conn->prepare("SELECT * FROM REGISTRY where name = ?"); if ($stmt->execute())) { while ($row = $stmt->fetch()) { //默認是 fetch(PDO::FETCH_BOTH) print_r($row); print "<br>"; } } ?> //輸出 Array ( [id] => 2 [0] => 2 [name]=>"abc" [1]=>"abc") Array ( [id] => 3 [0] => 3 [name]=>"def" [1]=>"def" )
方法二
<?php $stmt = $conn->prepare("SELECT * FROM REGISTRY where name = ?"); if ($stmt->execute())) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { print_r($row); print "<br>"; } } ?> //輸出 Array ( [id] => 2 [name]=>"abc") Array ( [id] => 3 [name]=>"def" )
五:事務處理(例子摘自php手冊)
$conn->beginTransaction()/commit()/rollBack() 分別是開啟/提交/回滾一個事務
代碼:
try { $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//設置錯誤模式為異常 $conn->beginTransaction(); $conn->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')"); $conn>exec("insert into salary(id, amount, changedate) values (23, 50000, NOW())"); $dbh->commit(); } catch (Exception $e) { $conn->rollBack(); echo "Failed: " . $e->getMessage(); }
六 : insert的預處理(兩種方法類似)
方法一:
$stmt = $conn->prepare("insert into test values(:id,:name)"); $stmt->bindParam(':id', $id); $stmt->bindParam(':name', $name); // 插入行 $id=1; $name = "Doe"; $stmt->execute(); // 插入其他行 $id=1; $name = "Mary"; $stmt->execute();
方法二:
$stmt = $conn->prepare("insert into test values(?,?)"); $stmt->bindParam(1, $id); $stmt->bindParam(2, $name); // 插入行 $id=1; $name = "Doe"; $stmt->execute(); // 插入其他行 $id=1; $name = "Mary"; $stmt->execute();