iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 29
0
Modern Web

網頁程式設計so easy系列 第 29

Day28 [PDO_資料庫存取擴充程式]

PDO全名PHP Data Object,它是使用類似mysqli物件導向資料庫存取方式來撰寫資料庫程式,不過mysqli只支援MySQL資料庫系統,PDO能夠支援超過十種伺服器,也就是我們可以寫出相同PDO來存取不同的資料庫系統。

啟用PDO

XAMPP需啟用PDO,步驟如下:
Apache> Config> php.ini
http://ithelp.ithome.com.tw/upload/images/20161229/20103385WLGUJM9PbA.png
將前面的分號刪除

重新啟動apache設定值即生效。

開啟MySQL資料庫連接

程式碼範例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>PDO.php</title>
</head>
<body>
<?php
$dsn = "mysql:dbname=test;host=localhost;port=3306";
$username = "root";
$password = "1234";
try {
   // 建立MySQL伺服器連接和開啟資料庫 
   $link = new PDO($dsn, $username, $password);
   // 指定PDO錯誤模式和錯誤處理
   $link->setAttribute(PDO::ATTR_ERRMODE, 
                PDO::ERRMODE_EXCEPTION);
   echo "成功建立MySQL伺服器連接和開啟test資料庫"; 
} catch (PDOException $e) {
   echo "連接失敗: " . $e->getMessage();
}
$link = null;
?>
</body>
</html>

http://ithelp.ithome.com.tw/upload/images/20161229/201033858ph1Q2RpKL.png

執行SQL指定

程式碼範例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>PDO_query.php</title>
</head>
<body>
<?php
$dsn = "mysql:dbname=test;host=localhost;port=3306";
$username = "root";
$password = "1234";
try {
   // 建立MySQL伺服器連接和開啟資料庫 
   $link = new PDO($dsn, $username, $password);
   // 指定PDO錯誤模式和錯誤處理
   $link->setAttribute(PDO::ATTR_ERRMODE, 
                PDO::ERRMODE_EXCEPTION);
   $sql = "SELECT * FROM account";
   echo "SQL查詢字串: $sql <br/>";
   // 送出UTF8編碼的MySQL指令
   $link->query('SET NAMES utf8');
   // 送出查詢的SQL指令
   if ( $result = $link->query($sql) ) { 
      echo "<br/><b>帳戶資料:</b><hr/>";  // 顯示查詢結果
      // 取得記錄數
      $total_records = $result->rowCount();
      echo "資料筆數: $total_records 筆<br/>"; 
      while( $row = $result->fetch(PDO::FETCH_ASSOC) ){ 
         echo $row["name"]."<br/>";
      } 
   } 
} catch (PDOException $e) {
   echo "連接失敗: " . $e->getMessage();
}
$link = null;
?>
</body>
</html>

http://ithelp.ithome.com.tw/upload/images/20161229/20103385aVUPACHuAr.png

此程式碼會查詢account資料表,並逐一將帳戶名稱列出來。
http://ithelp.ithome.com.tw/upload/images/20161229/201033857c9X611686.png

使用參數的SQL指令字串

為了避免sql injection等攻擊,通常會使用參數化的方式來寫SQL指令。

程式法範例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>PDO_ps.php</title>
</head>
<body>
<?php
$dsn = "mysql:dbname=test;host=localhost;port=3306";
$username = "root";
$password = "1234";
try {
   // 建立MySQL伺服器連接和開啟資料庫 
   $link = new PDO($dsn, $username, $password);
   // 指定PDO錯誤模式和錯誤處理
   $link->setAttribute(PDO::ATTR_ERRMODE, 
                PDO::ERRMODE_EXCEPTION);
   $sql = "SELECT * FROM account WHERE name =?";
   echo "SQL查詢字串: $sql <br/><br/>";
   // 送出UTF8編碼的MySQL指令
   $link->query('SET NAMES utf8');
   $account = $link->prepare($sql);    // 準備SQL指令字串
   $account->execute(array("1234"));   // 執行SQL指令字串   
   // 送出查詢的SQL指令
   if ( $result = $account->fetchAll(PDO::FETCH_ASSOC) ) { 
      echo "<b>帳戶資料(name = \"1234\"):</b><br/>";  // 顯示查詢結果
      // 取得記錄數
      $total_records = $account->rowCount();
      echo "資料筆數: $total_records 筆<br/>"; 
      foreach( $result as $row ){ 
         echo $row["name"]."<br/>";
      } 
   } 
} catch (PDOException $e) {
   echo "連接失敗: " . $e->getMessage();
}
$link = null;
?>
</body>
</html>

http://ithelp.ithome.com.tw/upload/images/20161229/20103385qAl1XlCkOa.png


上一篇
Day27 [網站登入]
下一篇
Day29 [開放資料]
系列文
網頁程式設計so easy30

尚未有邦友留言

立即登入留言