从机器人到自行车的许多示例都可以作为对 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 扩展建立与 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
方法具有三个参数:$table
、$rows
和 $where
。然后解析 $where
数组以生成用于更新查询的 SQL WHERE
子句。解析 $rows
数组以生成用于更新查询的 SQL SET
子句。数组键表示列名称,而数组值表示列的新值。我们使用
至此,我们完成了数据库操作所需方法的创建。您可以将其另存为 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中文网其他相关文章!