今天我們來談?wù)凱HP PDO封裝類,這是一個(gè)非常實(shí)用的工具,通過對PDO的封裝,可以更方便的操作數(shù)據(jù)庫,減少了代碼量,提高了開發(fā)效率。
我們來看一下優(yōu)化前,我們連接MySQL并插入數(shù)據(jù)的代碼:
$servername = "localhost"; $username = "root"; $password = ""; $dbname = "test"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $sql = "INSERT INTO users (name, age) VALUES ('Tom', '20')"; // 插入數(shù)據(jù) $conn->exec(sql); echo "插入成功"; } catch(PDOException $e) { echo $e->getMessage(); } // 關(guān)閉連接 $conn = null;
可以看到,代碼量相對較大,而且也不夠直觀,如果我們需要進(jìn)行簡單的增刪改查操作,也需要寫很多重復(fù)的代碼。那么我們就需要使用一個(gè)PHP PDO封裝類。
下面是我們使用PHP PDO封裝類進(jìn)行代碼優(yōu)化。我們首先需要定義一個(gè)PDO封裝類,將常用的增刪改查封裝起來,使用時(shí)直接調(diào)用。
class Db { // 定義變量 private static $instance; private $config = []; private $db; private $sql; private $stmt; // 構(gòu)造函數(shù) private function __construct() {} // 獲取單例 public static function getInstance() { if(!self::$instance) { self::$instance = new self(); } return self::$instance; } // 連接數(shù)據(jù)庫 public function connect($host, $user, $password, $database, $port = 3306, $charset = 'utf8') { $dsn = sprintf('mysql:host=%s;port=%d;dbname=%s;charset=%s', $host, $port, $database, $charset); $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false ); try{ $this->db = new PDO($dsn, $user, $password, $options); return $this; } catch(PDOException $e) { printf('Database connect error:%s', $e->getMessage()); } } // 執(zhí)行SQL語句 public function execute($sql, $params = []) { $this->sql = $sql; try{ $this->stmt = $this->db->prepare($this->sql); $this->stmt->execute($params); return $this; } catch(PDOException $e) { printf('SQL語句執(zhí)行錯(cuò)誤:%s', $e->getMessage()); } } // 獲取一行記錄 public function fetchRow() { return $this->stmt->fetch(); } // 獲取多行記錄 public function fetchAll() { return $this->stmt->fetchAll(); } // 獲取結(jié)果集的第一行第一列的值 public function fetchColumn() { return $this->stmt->fetchColumn(); } // 獲取結(jié)果集的行數(shù) public function rowCount() { return $this->stmt->rowCount(); } }
我們可以看到,在封裝類里面定義了常用的連接、執(zhí)行SQL語句和獲取結(jié)果集的方法。我們只需要調(diào)用相應(yīng)的方法即可,而不必再重復(fù)編寫大量的代碼。
以下是我們優(yōu)化后的示例代碼:
$Db = Db::getInstance(); $Db->connect('localhost', 'root', '', 'test'); $sql = "INSERT INTO users (name, age) VALUES ('Tom', '20')"; $Db->execute($sql); echo "插入成功";
我們可以看到,優(yōu)化后的代碼用的次數(shù)更少而且也比優(yōu)化前的代碼清晰明了。此外,我們還可以愉快地應(yīng)用這些函數(shù)來執(zhí)行諸如更新、刪除和查詢之類的操作。
總結(jié)一下,PHP PDO封裝類是一個(gè)非常實(shí)用的工具,通過對PDO的封裝,可以更方便的操作數(shù)據(jù)庫,減少了代碼量,提高了開發(fā)效率。我們可以通過定義常用的增刪改查方法,來對不同數(shù)據(jù)庫進(jìn)行操作,減少了代碼冗余程度,使我們的代碼更加清晰簡潔。