Rumah  >  Artikel  >  pembangunan bahagian belakang  >  OOP dunia sebenar menggunakan PHP dan MySQL

OOP dunia sebenar menggunakan PHP dan MySQL

王林
王林asal
2023-08-26 19:45:20712semak imbas

使用 PHP 和 MySQL 进行真实世界的 OOP

Banyak contoh daripada robot kepada basikal berfungsi sebagai mudahpenjelasan OOP. Walau bagaimanapun, saya lebih suka menunjukkan cara OOP berfungsi dalam senario kehidupan sebenar, terutamanya untuk pengaturcara. Contoh praktikal ialah mencipta kelas MySQL CRUD (Buat, Baca, Kemas Kini dan Padam). Dengan cara ini, pengaturcara boleh mengurus entri dalam projek dengan berkesan, tanpa mengira reka bentuk pangkalan data.

Setelah kami menentukan keperluan, mencipta struktur asas kelas adalah agak mudah. Pertama, kita perlu memastikan kita boleh melakukan operasi asas MySQL. Untuk mencapai matlamat ini, kita perlu melaksanakan fungsi berikut:

  • Pilih
  • Masukkan
  • Padamkan
  • Kemas kini
  • sambung
  • Putuskan sambungan

Mari kita lihat rupa definisi kelas kita:

<?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() {}
}

Pada asasnya, ia adalah kelas rangka yang dipanggil Pangkalan Data yang mewakili sambungan pangkalan data dan menyediakan kaedah untuk berinteraksi dengan pangkalan data. Kami mentakrifkan sifat peribadi yang berbeza seperti $db_host, $db_user, $db_pass, $db_name dan $con. Kelas ini digunakan untuk menyimpan butiran sambungan pangkalan data dan objek sambungan itu sendiri. 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

Dalam bahagian seterusnya kami akan memperincikan pelaksanaan sebenar kelas ini. 🎜

Laksanakan kelas pangkalan data

🎜Dalam bahagian ini, kami akan melaksanakan kaedah yang diperlukan untuk melaksanakan operasi pangkalan data yang berbeza. 🎜

kaedah sambung

🎜Teruskan menambah kaedah connect seperti yang ditunjukkan dalam coretan kod berikut. 🎜
CREATE TABLE `mysqlcrud` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(255) NOT NULL,
	`email` VARCHAR(255) NOT NULL,
	PRIMARY KEY (`id`)
);
Tujuan kaedah 🎜connect adalah untuk mewujudkan sambungan ke pangkalan data MySQL menggunakan sambungan mysqli. Pertama, kami menyemak sama ada sudah ada sambungan ke pangkalan data Jika ia wujud, kaedah hanya mengembalikan true yang menunjukkan bahawa sambungan telah diwujudkan dan tidak perlu menyambung semula. Jika tiada sambungan, ia cuba menyambung ke pangkalan data menggunakan fungsi mysqli_connect. 🎜 🎜Setelah sambungan pangkalan data berjaya, pangkalan data akan dipilih dengan memanggil fungsi mysqli_select_db. Akhir sekali, jika pemilihan pangkalan data berjaya, true dikembalikan, menunjukkan bahawa sambungan telah diwujudkan dan pangkalan data dipilih. Mengembalikan false jika sambungan atau pemilihan pangkalan data gagal. 🎜

kaedah putus

🎜Mari kita lihat kaedah putus sambungan. 🎜
<?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.";
}
?>
Ia menyemak sama ada terdapat sambungan pangkalan data yang aktif dan, jika ya, menutup sambungan menggunakan fungsi mysqli_close() dan menetapkan atribut $this->con kepada palsu.

pilih kaedah

🎜Ini adalah salah satu kaedah yang paling penting dan kerap digunakan. Mula-mula, kami mencipta kaedah tableExists yang menyemak sama ada jadual itu wujud dalam pangkalan data MySQL. 🎜
<?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.";
}
?>
🎜Seterusnya, kami terus melaksanakan kaedah select. 🎜
<?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.";
}
?>
🎜Ia digunakan untuk mendapatkan semula rekod daripada pangkalan data. Ia mula-mula membina rentetan pertanyaan SQL menggunakan parameter input. Ia menyemak sama ada jadual yang ditentukan wujud dalam pangkalan data dan, jika ya, melaksanakan pertanyaan. Jika pertanyaan berjaya, baris hasil diambil dan dikembalikan sebagai tatasusunan bersekutu. Jika pertanyaan gagal, kaedah ini mengembalikan false. Jika jadual yang ditentukan tidak wujud dalam pangkalan data, false juga dikembalikan. 🎜

kaedah masukkan

🎜Mari kita lihat kaedah insert seperti yang ditunjukkan dalam coretan kod berikut. 🎜
<?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.";
}
?>
🎜Ia digunakan untuk memasukkan data ke dalam jadual pangkalan data MySQL menggunakan sambungan mysqli. Fungsi ini mengambil tiga parameter: nama jadual, nilai yang hendak disisipkan dan (pilihan) lajur yang hendak disisipkan. Pertama, ia menyemak sama ada jadual yang ditentukan wujud dalam pangkalan data dan, jika ya, membina pertanyaan SQL untuk memasukkan data menggunakan nilai dan lajur yang disediakan. Kami menggunakan fungsi mysqli_real_escape_string untuk membersihkan sebarang nilai rentetan. 🎜 🎜Akhir sekali, gunakan fungsi mysqli_query() untuk melaksanakan pertanyaan Jika pertanyaan berjaya, fungsi mengembalikan true, jika tidak, ia mengembalikan false. . 🎜

kaedah padam

🎜Mari kita lihat kaedah delete. 🎜 rrreee 🎜Ia digunakan untuk memadam jadual atau baris daripada pangkalan data. 🎜

kemas kini kaedah

🎜Ini juga merupakan salah satu cara penting untuk kami mengemaskini maklumat pangkalan data. 🎜 🎜kemas kini pelaksanaan kaedah sepatutnya kelihatan seperti di bawah. 🎜 rrreee 🎜Kaedah kemas kini mempunyai tiga parameter: $table, $rows dan $where. Tatasusunan $where kemudian dihuraikan untuk menjana klausa WHERE SQL untuk pertanyaan kemas kini. Menghuraikan tatasusunan $rows untuk menjana klausa SET SQL untuk pertanyaan kemas kini. Kekunci tatasusunan mewakili nama lajur, dan nilai tatasusunan mewakili nilai baharu lajur. Kami menggunakan fungsi mysqli_real_escape_string untuk membersihkan sebarang nilai rentetan. 🎜

至此,我们完成了数据库操作所需方法的创建。您可以将其另存为 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 操作。

Atas ialah kandungan terperinci OOP dunia sebenar menggunakan PHP dan MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn