PDO模組類的封裝(二)
阿新 • • 發佈:2018-11-15
// 例項化PDO物件
<?php
/*
PDO 介面封裝
*/
class db
{
public $pdo;
public $err = "ok"; //建立異常屬性
public function __construct() // 建構函式->例項化PDO物件
{
try {
$conn = 'mysql:host=localhost; port=3306; dbname=lx; ';
$usr = 'root' ;
$pwd = 'root';
$this->pdo = new PDO($conn, $usr, $pwd); // 建立PDO 物件
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //設定屬性 丟擲異常
$this->pdo->query('set names utf8'); // 設定編碼
} catch (PDOException $errobj) {
$this->err = $errobj->getMessage() . 'IN' . $errobj->getFile() . 'AT' . $errobj->getLine();
}
}
// 取得結果集物件
/*
\* 取得結果集物件
\* @param sql string sql語句
\* @param row array 資料(陣列)
\* @return object 結果集物件
*/
function get_stmt($sql, array $row = [])
{
try {
if ($this->pdo == null) return false;
// 預執行語句
$item = $this->pdo->prepare($sql);
// 引數繫結
foreach ($row as $key => $val) {
// $item->bindvalue(":$key", $val); //繫結陣列的 標記為KEY,值為vaL;
$item->bindvalue($key + 1, $val);
}
// 執行
$item->execute();
return $item;
} catch (PDOException $errObj) {
$this->err = $errObj->getMessage() . ' IN ' . $errObj->getFile() . ' AT ' . $errObj->getLine();
return false;
}
}
// 查詢操作
/*
\* 執行查詢操作的結果
\* @param sql string sql語句
\* @param row array 資料(陣列)
\* @param dType int 資料型別:2->二維;1->一維; 0->單值
\* @param rType string 結果型別:array->陣列; object->物件 字串 或 數值 | false
*/
public function get_open($sql, array $row = [], $dType = 1, $rType = 'array')
{
$item = $this->get_stmt($sql, $row);
$item->execute();
switch ($dType) {
case 0:
return $item->rowcount();
case 1:
return $item->fetch($rType == 'array' ? PDO::FETCH_ASSOC : PDO::FETCH_OBJ);
case 2:
return $item->fetchall($rType == 'array' ? PDO::FETCH_ASSOC : PDO::FETCH_OBJ);
}
return $item;
}
// 增、刪、改操作
/**
\* 執行增刪改操作,返回受影響的行數
\* @param sql string sql語句
\* @param row array 資料(陣列)
\* return int 或 false
*/
function get_count($sql, array $row = []) // 返回受影響行數
{
$item = $this->get_stmt($sql, $row);
return $item->rowcount();
}
// 取回錯誤資訊
public function get_err()
{
return $this->err;
}
}