關於 PDO+PDOStatement

  • PDO (資料庫主要操作)
  • PDOStatement (敘述整合)

使用 PDO 的方式開啟資料庫

config.php

// For PDO MySQL

define('DB_SOURCE', 'mysql:host='.DB_SERVERIP.';dbname='.DB_DATABASE);

function db_open()

{

try {

$pdo = new PDO(DB_SOURCE, DB_USERNAME, DB_PASSWORD); if(defined('SET_CHARACTER')) $pdo->query(SET_CHARACTER);

} catch (PDOException $e) { die("Error!: " . $e->getMessage()); } return $pdo;

}

對 SQL 指令和『資料』的綁定

 add_save.php

// 方法一:使用綁定參數

$sqlstr = "INSERT INTO person(usercode, username, address, birthday, height, weight, remark) VALUES (:usercode, :username, :address, :birthday, :height, :weight, :remark)";

$sth = $pdo->prepare($sqlstr);

$sth->bindParam(':usercode', $usercode, PDO::PARAM_STR);

$sth->bindParam(':username', $username, PDO::PARAM_STR); $sth->bindParam(':address' , $address , PDO::PARAM_STR);

$sth->bindParam(':birthday', $birthday, PDO::PARAM_STR);

$sth->bindParam(':height' , $height , PDO::PARAM_INT);

$sth->bindParam(':weight' , $weight , PDO::PARAM_INT);

$sth->bindParam(':remark' , $remark , PDO::PARAM_STR);

對 SQL 指令和『資料』的綁定

 add_save.php

// 方法二:使用數值,依順序對應

$sqlstr = "INSERT INTO person(usercode, username, address, birthday, height, weight, remark) VALUES (?, ?, ?, ?, ?, ?, ?)";

$sth = $pdo->prepare($sqlstr);

$sth->bindValue(1, $usercode, PDO::PARAM_STR);

$sth->bindValue(2, $username, PDO::PARAM_STR);

$sth->bindValue(3, $address , PDO::PARAM_STR);

$sth->bindValue(4, $birthday, PDO::PARAM_STR);

$sth->bindValue(5, $height , PDO::PARAM_INT);

$sth->bindValue(6, $weight , PDO::PARAM_INT);

$sth->bindValue(7, $remark , PDO::PARAM_STR);

PDO+PDOStatement 程式的範例

display.php

<?php

include 'config.php';

include 'utility.php';

$uid = isset($_GET['uid']) ? $_GET['uid'] : 0;

// 連接資料庫

$pdo = db_open();

// 寫出 SQL 語法

$sqlstr = "SELECT * FROM person WHERE uid=? ";

$sth = $pdo->prepare($sqlstr);

$sth->bindValue(1, $uid, PDO::PARAM_INT);

PDO+PDOStatement 程式的範例

display.php

// 執行SQL及處理結果

if($sth->execute())

{ // 成功執行 query 指令

if($row = $sth->fetch(PDO::FETCH_ASSOC))

{ $uid = $row['uid'];

$usercode = convert_to_html($row['usercode']);

$username = convert_to_html($row['username']);

$address = convert_to_html($row['address']);

$birthday = convert_to_html($row['birthday']);

$height = convert_to_html($row['height']);

$weight = convert_to_html($row['weight']);

$remark = convert_to_html($row['remark']);

提取資料 fetch() 用法

PDO+PDOStatement 程式的範例

display.php

$data = <<< HEREDOC
       <table>
         <tr><th>代碼</th><td>{$usercode}</td></tr>
         <tr><th>姓名</th><td>{$username}</td></tr>
         <tr><th>地址</th><td>{$address}</td></tr>
         <tr><th>生日</th><td>{$birthday}</td></tr>
         <tr><th>身高</th><td>{$height}</td></tr>
         <tr><th>體重</th><td>{$weight}</td></tr>
         <tr><th>備註</th><td>{$remark}</td></tr>
       </table>
HEREDOC;

PDO+PDOStatement 程式的範例

display.php

 }

   else

   {

     $data = '查不到相關記錄!';

   }

}

else

{

   // 無法執行 query 指令時

   $data = error_message('display');

}

PDO+PDOStatement 程式的範例

display.php

$html = <<< HEREDOC
<button onclick="location.href='list_page.php';">返回列表</button>
<h2>顯示資料</h2>
{$data}
HEREDOC;
 

include 'pagemake.php';
pagemake($html, '');

?>

SQL 程式與資料分離