首頁 >後端開發 >PHP問題 >php怎麼封裝資料庫增刪改的類

php怎麼封裝資料庫增刪改的類

PHPz
PHPz原創
2023-03-22 15:22:411483瀏覽

隨著web應用程式的發展,對於資料庫管理的需求也越來越高。身為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();

4.總結

封裝資料庫增刪改的類,是我們在web應用程式中必須要完成的任務。透過將資料庫操作封裝到一個類別中,可以提高程式碼的可讀性、可維護性和安全性,並且還可以方便的進行程式碼重複使用。綜上所述,我們應該重視封裝資料庫操作類別的開發。

以上是php怎麼封裝資料庫增刪改的類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn