從機器人到自行車的許多範例都可以作為 OOP 的簡單解釋。然而,我更喜歡演示 OOP 如何在現實場景中發揮作用,特別是針對程式設計師。一個實際的範例是建立 MySQL CRUD(建立、讀取、更新和刪除)類別。這樣,無論資料庫的設計如何,程式設計師都可以有效地管理專案中的條目。
一旦我們確定了需求,創建類別的基本結構就相對簡單了。首先,我們需要確保我們可以進行基本的 MySQL 操作。為了實現這一點,我們需要實作以下功能:
讓我們快速看看我們的類別定義是什麼樣的:
<?php class Database { private $db_host = ''; private $db_user = ''; private $db_pass = ''; private $db_name = ''; private $con = ''; public function __contruct($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; } public function connect() {} public function disconnect() {} public function select() {} public function insert() {} public function delete() {} public function update() {} }
基本上,它是一個名為 Database
的骨架類,它代表資料庫連接並提供與資料庫互動的方法。我們定義了不同的私有屬性,例如$db_host
、$db_user
、$db_pass
、$db_name
和$con
。此類別用於儲存資料庫連接詳細資訊和連接物件本身。
在下一節中,我們將詳細介紹此類的實際實作。
在本節中,我們將實作執行不同資料庫操作所需的方法。
connect
方法繼續新增 connect
方法,如下列程式碼片段所示。
<?php public function connect() { if (!$this->con) { $this->con = mysqli_connect($this->db_host, $this->db_user, $this->db_pass); if($this->con) { $seldb = mysqli_select_db($this->con, $this->db_name); if($seldb) { return true; } else { return false; } } else { return false; } } else { return true; } }
connect
方法的目的是使用 mysqli 擴充功能建立與 MySQL 資料庫的連線。首先,我們檢查是否已經存在與資料庫的連接,如果存在,該方法只是返回 true
表示連接已經建立,無需重新連接。如果沒有連接,它會嘗試使用 mysqli_connect
函數連接到資料庫。
一旦資料庫連線成功,就會透過呼叫mysqli_select_db
函數來選擇資料庫。最後如果資料庫選擇成功,則傳回true
,表示連接建立,資料庫選擇。如果連線或資料庫選擇失敗,則傳回 false
。
disconnect
方法讓我們來看看 disconnect
方法。
<?php public function disconnect() { if ($this->con) { if (mysqli_close($this->con)) { $this->con = false; return true; } else { return false; } } }
mysqli_close()
函數關閉連接,並將$this->con
屬性設為false
。
select
方法這是最重要且經常使用的方法之一。首先,我們建立 tableExists
方法,用於檢查 MySQL 資料庫中該表是否存在。
<?php private function tableExists($table) { $tablesInDb = mysqli_query($this->con, 'SHOW TABLES FROM '.$this->db_name.' LIKE "'.$table.'"'); if($tablesInDb) { if(mysqli_num_rows($tablesInDb) == 1) { return true; } else { return false; } } }
接下來,我們繼續實作 select
方法。
<?php public function select($table, $rows = '*', $where = null, $order = null) { $q = 'SELECT '.$rows.' FROM '.$table; if($where != null) $q .= ' WHERE '.$where; if($order != null) $q .= ' ORDER BY '.$order; if($this->tableExists($table)) { $result = $this->con->query($q); if($result) { $arrResult = $result->fetch_all(MYSQLI_ASSOC); return $arrResult; } else { return false; } } else { return false; } }
它用於從資料庫中檢索記錄。它首先使用輸入參數建立 SQL 查詢字串。它檢查資料庫中是否存在指定的表,如果存在,則執行查詢。如果查詢成功,結果行將作為關聯數組取得並傳回。如果查詢失敗,則該方法傳回false
。如果資料庫中不存在指定的表,也傳回false
。
insert
方法讓我們來看看 insert
方法,如下列程式碼片段所示。
<?php public function insert($table, $values, $rows = null) { if ($this->tableExists($table)) { $insert = 'INSERT INTO '.$table; if ($rows != null) { $insert .= ' ('.$rows.')'; } for ($i = 0; $i < count($values); $i++) { $values[$i] = mysqli_real_escape_string($this->con, $values[$i]); if (is_string($values[$i])) { $values[$i] = '"'.$values[$i].'"'; } } $values = implode(',', $values); $insert .= ' VALUES ('.$values.')'; $ins = mysqli_query($this->con, $insert); if ($ins) { return true; } else { return false; } } }
它用於使用 mysqli 擴充功能將資料插入到 MySQL 資料庫的表中。此函數採用三個參數:表名、要插入的值、要插入的列(可選)。首先,它檢查資料庫中是否存在指定的表,如果存在,則建構 SQL 查詢以使用提供的值和列插入資料。我們使用 mysqli_real_escape_string
函數來清理任何字串值。
最後使用mysqli_query()
函數執行查詢,如果查詢成功,函數傳回true
,否則傳回false
。
delete
方法讓我們快速瀏覽一下 delete
方法。
<?php public function delete($table, $where = null) { if ($this->tableExists($table)) { if ($where == null) { $delete = 'DELETE '.$table; } else { $delete = 'DELETE FROM '.$table.' WHERE '.$where; } $del = $this->con->query($delete); if ($del) { return true; } else { return false; } } else { return false; } }
它用於從資料庫中刪除表或行。
update
方法這也是我們更新資料庫資訊的重要方法之一。
update
方法實作應該如下所示。
<?php public function update($table, $rows, $where) { if ($this->tableExists($table)) { // Parse the where values // even values (including 0) contain the where rows // odd values contain the clauses for the row for ($i = 0; $i < count($where); $i++) { if ($i % 2 != 0) { if (is_string($where[$i])) { if (($i + 1) != null) { $where[$i] = '"' . $where[$i] . '" AND '; } else { $where[$i] = '"' . $where[$i] . '"'; } } } } $where = implode('=', $where); $update = 'UPDATE ' . $table . ' SET '; $keys = array_keys($rows); $setValues = []; foreach ($keys as $key) { $value = $rows[$key]; $setValues[] = "`$key` = '" . mysqli_real_escape_string($this->con, $value)."'"; } $update .= implode(',', $setValues); $update .= ' WHERE ' . $where; $query = $this->con->query($update); if ($query) { return true; } else { return false; } } else { return false; } }
update
方法有三個參數:$table
、$rows
和 $where
。然後解析 $where
陣列以產生用於更新查詢的 SQL WHERE
子句。解析 $rows
陣列以產生用於更新查詢的 SQL SET
子句。陣列鍵表示列名稱,而陣列值表示列的新值。我們使用 mysqli_real_escape_string
函數來清理任何字串值。
至此,我们完成了数据库操作所需方法的创建。您可以将其另存为 Database.php 文件。
在下一节中,我们将了解如何使用它。
数据库
类首先,我们在数据库中创建一个 MySQL 表,以便我们可以测试该表上的 CRUD 操作。
继续运行以下 SQL 来创建表。
CREATE TABLE `mysqlcrud` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) );
它应该在您的数据库中创建 mysqlcrud
表。
让我们看看如何插入新行。
<?php require "Database.php"; $db = new Database("DB_HOST", "DB_USER", "DB_PASS", "DB_NAME"); if ($db->connect()) { $db->insert('mysqlcrud', array(1,"Foo Bar","foobar@yahoo.com")); } else { echo "There was some error connecting to the database."; } ?>
首先,我们创建了一个新的 Database
对象,并将数据库凭据作为参数传递。您需要将其替换为您的凭据。接下来调用Database
类的connect
方法来建立与数据库的连接。如果连接成功,则调用 insert
方法,并将表名作为第一个参数,将新行的值数组作为第二个参数。
如果一切顺利,它应该在 mysqlcrud
表中创建一个新行。
让我们看看更新操作是如何工作的。
<?php require "Database.php"; $db = new Database("DB_HOST", "DB_USER", "DB_PASS", "DB_NAME"); if ($db->connect()) { $db->update('mysqlcrud',array('name'=>'Updated Foo Bar'), array('id',1)); } else { echo "There was some error connecting to the database."; } ?>
如您所见,我们调用了 update
方法来更新该行的 name
列。
接下来,让我们看看如何删除特定行。
<?php require "Database.php"; $db = new Database("DB_HOST", "DB_USER", "DB_PASS", "DB_NAME"); if ($db->connect()) { $db->delete('mysqlcrud', "`id` = '1'"); } else { echo "There was some error connecting to the database."; } ?>
它应该删除 id 等于 1
的行。
让我们看看如何从表中检索所有记录。
<?php require "Database.php"; $db = new Database("DB_HOST", "DB_USER", "DB_PASS", "DB_NAME"); if ($db->connect()) { $rows = $db->select('mysqlcrud'); } else { echo "There was some error connecting to the database."; } ?>
如您所见,select
方法允许我们从所需的表中获取所有记录。
这就是您如何使用我们的类执行 CRUD 操作。
以上是使用 PHP 和 MySQL 進行真實世界的 OOP的詳細內容。更多資訊請關注PHP中文網其他相關文章!