您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“php如何封裝數據庫增刪改的類”,內容詳細,步驟清晰,細節處理妥當,希望這篇“php如何封裝數據庫增刪改的類”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
1.為什么需要封裝數據庫類?
通常情況下,在進行數據庫操作時,我們會在應用程序的主要邏輯中進行操作,比如在控制器中操作數據庫。但實際上,這種方式存在幾個明顯的問題:
代碼冗余:在我們的應用程序中,很可能多個控制器需要對數據庫進行操作。如果每個控制器都單獨編寫數據庫操作的代碼,那么就會出現大量的冗余代碼。
代碼可讀性差:這種情況下,代碼的可讀性也就差了。很可能我們同一段代碼就出現在多個控制器中,這樣一來,就會給其他開發人員帶來困擾。
安全問題:將數據庫操作代碼直接寫在應用程序中,存在一定的安全風險。比如sql注入等問題。
綜上所述,我們有必要將我們的數據庫操作代碼封裝起來,讓它們成為一個獨立的模塊。這個模塊需要具有以下幾個特點:
具有良好的可讀性
能夠方便的進行代碼復用
具有良好的擴展性
能夠有效的解決安全問題
2.封裝數據庫增刪改類的基本思路
針對上面提到的問題,我們可以把類寫成php庫的形式,以便實現類的復用。封裝數據庫增刪改類的基本思路如下:
將所有的數據庫操作都封裝在一個類中,比如叫做db類。
編寫通用的方法來實現數據庫增刪改查操作。
在方法中實現參數化查詢,從而有效的避免sql注入等安全問題。
將所有的錯誤信息都捕獲,并且封裝成一個統一的異常拋出給上層代碼。
下面是一個簡單的db類的實現:
class db {
private $db_host;
private $db_user;
private $db_pass;
private $db_name;
private $conn;
function __construct($db_host, $db_user, $db_pass, $db_name) {
$this->db_host = $db_host;
$this->db_user = $db_user;
$this->db_pass = $db_pass;
$this->db_name = $db_name;
}
// 數據庫連接方法
function connect() {
$this->conn = mysqli_connect($this->db_host, $this->db_user, $this->db_pass, $this->db_name);
if (!$this->conn) {
throw new Exception('數據庫連接失敗');
}
mysqli_query($this->conn, "SET NAMES 'utf8'");
}
// 數據庫關閉方法
function close() {
mysqli_close($this->conn);
}
// 查詢方法,參數化查詢
function query($sql, $params) {
$stmt = mysqli_prepare($this->conn, $sql);
if (!$stmt) {
throw new Exception('query error: '.mysqli_error($this->conn));
}
if (count($params) > 0) {
call_user_func_array('mysqli_stmt_bind_param', array_merge(array($stmt, str_repeat('s', count($params))), $params));
}
$result = mysqli_stmt_execute($stmt);
if (!$result) {
throw new Exception('query error: '.mysqli_stmt_error($stmt));
}
$rows = array();
$meta = mysqli_stmt_result_metadata($stmt);
if ($meta) {
while ($field = mysqli_fetch_field($meta)) {
$params[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);
while (mysqli_stmt_fetch($stmt)) {
$rows[] = $row;
}
}
mysqli_stmt_close($stmt);
return $rows;
}
// 增加方法,參數化查詢
function insert($table, $data) {
$sql = 'INSERT INTO '.$table.' ('.implode(',', array_keys($data)).') VALUES ('.implode(',', array_fill(0, count($data), '?')).')';
$result = $this->query($sql, array_values($data));
return mysqli_affected_rows($this->conn);
}
// 更新方法
function update() {
// 實現更新方法
}
// 刪除方法
function delete() {
// 實現刪除方法
}
}
3.使用封裝好的類
當我們需要對數據庫進行增刪改查時,只需要引入db類,然后實例化即可。比如:
require_once 'db.php';
$db = new db('localhost', 'root', 'root', 'test');
$db->connect();
$sql = 'INSERT INTO `user`(`name`, `age`) VALUES (?, ?)';
$data = array('Tom', '18');
$db->query($sql, $data);
$db->close();
讀到這里,這篇“php如何封裝數據庫增刪改的類”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。