PHP 对 MySQL 数据库进行 CRUD 操作

在本文中,我们将探讨如何使用 MySQL 数据库通过 PHP 执行 CRUD(创建、读取、更新和删除)操作。 如果大家想亲身体验 PHP 中的数据库连接,本文是一个很好的起点。

如果大家刚刚开始使用 PHP,可能会意识到数据库连接是一项迟早需要熟悉的基本功能。 在大多数情况下,数据库是任何 Web 应用程序的骨干并保存应用程序的数据。 因此,作为 PHP 开发人员,大家需要知道如何处理数据库操作。

在本文中,我们将保持简单并探索如何使用核心 mysqli 函数。 在本系列的后续文章中,我们将探讨处理数据库连接的其他几种方法。

今天,我们将学习 PHP 中数据库连接的基础知识,我们将使用 MySQL 数据库作为我们的数据库后端。 让我们快速浏览一下我们将在本文中介绍的内容:

  • 如何建立数据库连接
  • 如何选择数据库
  • 如何插入和更新记录
  • 如何获取记录
  • 如何删除记录

我假设大家已经安装了 PHP 和 MySQL,并且了解 MySQL 的基础知识。 此外,我们需要确保在您的 PHP 安装中启用了 mysqli 扩展,因为我们将使用它来对 MySQL 数据库进行数据库操作。

如果大家不确定 mysqli 扩展,可以使用 phpinfo() 函数检查它。 在 phpinfo() 输出中,我们可以检查是否有标题为 mysqli 的部分。 如果启用了 mysqli 扩展大家还应该看到 Mysqli Support | enabled 。

还有一种使用 CLI 界面检查它的简单方法。 我们可以运行以下命令来列出 PHP 设置启用的所有扩展。

$ php -m

它应该打印一个扩展列表,如果它包含 mysqli 关键字,则 mysqli 扩展已启用。

现在我们已经设置好了,让我们开始创建数据库连接。


如何建立数据库连接

在本节中,我们将讨论如何使用 mysqli 扩展建立数据库连接。

有两种方法可以使用 mysqli 扩展,过程式和面向对象的,但我们将在本文中使用过程式方式来使事情简单化。 如果大家对面向对象的语法感到好奇,请在评论部分告诉我你的问题,我很乐意为大家解答。

首先,让我们了解一下 mysqli_connect 函数的语法,该函数用于与 MySQL 后端建立连接。

$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}");
var_dump($connection_obj);

mysqli_connect 函数有四个参数,并在连接成功时返回连接对象。 让我们来看看每个参数:

  • {MYSQL_HOSTNAME}:这应该替换为 MySQL 服务器的主机名或 IP 地址。 如果您在本地系统中使用 MySQL 服务器,则可以使用 localhost 或 127.0.0.1。
  • {MYSQL_USERNAME}:您的 MySQL 用户的用户名。 用户名默认为 root。
  • {MYSQL_PASSWORD}:您的 MySQL 用户的密码。 默认情况下,密码为空(即无密码)。
  • {MYSQL_DATABASE}:您要连接的数据库。

连接成功后,$connection_obj 包含连接对象。 下图显示了 $connection_obj 对象的各种属性。

PHP 对 MySQL 数据库进行 CRUD 操作

有了这个,我们就可以对提供给 {MYSQL_DATABASE} 参数的数据库运行查询了。

另一方面,如果连接不成功,我们可以调试它,如以下代码片段所示:

$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}");
var_dump($connection_obj);
// 如果连接不成功:
if (!$connection_obj) {
    echo "Error No: " . mysqli_connect_errno();
    echo "Error Description: " . mysqli_connect_error();
    exit;
}

在下一节中,我们将了解如何使用连接对象选择特定的数据库。


如何选择数据库

在上一节中,我们讨论了如何使用 mysqli_connect 函数建立数据库连接。 在本节中,我们将了解如何在 MySQL 连接成功后选择数据库。

当然,正如我们已经看到的,我们始终可以在 mysqli_connect 函数本身的第四个参数中传递一个数据库。 但是,如果我们想在连接到 MySQL 后更改数据库,还有另一种方法可以执行此操作。 我们可以使用 mysqli_select_db 函数来选择要使用的数据库。

让我们修改上一节中讨论的示例,看看它是如何工作的。

$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}");
var_dump($connection_obj);
// 如果连接不成功:
if (!$connection_obj) {
    echo "Error No: " . mysqli_connect_errno();
    echo "Error Description: " . mysqli_connect_error();
    exit;
}
mysqli_select_db($connection_obj, "{MYSQL_DATABASE}");

如你所见,我们只在 mysqli_connect 函数中传递了三个参数,这应该会为我们提供一个成功的数据库连接。 我们没有在第四个参数中传递数据库,而是使用 mysqli_select_db 函数选择数据库。

mysqli_select_db 函数有两个参数:连接对象和要连接的数据库。


如何创建(插入)和更新记录

在前面的部分中,我们讨论了如何设置 MySQL 连接和选择要使用的数据库。 现在,我们将看看如何对选定的数据库执行不同类型的查询。 首先,让我们看看如何插入和更新记录。

如果我们想按照本文中讨论的示例进行操作,则需要在我们的数据库中创建以下 MySQL 表。 从现在开始,我们将在所有示例中使用该表。

CREATE TABLE `employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `phone` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

如何创造记录

为了简单起见,我们将初始化需要在脚本开头插入到员工表中的值。 然而,在大多数情况下,这些将来自使用表单提交的 $_POST 变量中的用户输入。

$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}");
if (!$connection_obj) {
    echo "Error No: " . mysqli_connect_errno();
    echo "Error Description: " . mysqli_connect_error();
    exit;
}
// initialize variables for the insert query 
$name = 'zadmei';
$email = 'zadmei.onmpw@163.com';
$phone = '12345678900';
// prepare the insert query 
$query = "INSERT INTO employee(`name`,`email`, `phone`) 
VALUES ('". mysqli_real_escape_string($connection_obj, $name) ."','". mysqli_real_escape_string($connection_obj, $email) ."','". mysqli_real_escape_string($connection_obj, $phone) ."')";
// run the insert query 
mysqli_query($connection_obj, $query);
// close the db connection 
mysqli_close($connection_obj);

在上面的脚本中,我们首先初始化了我们将在插入查询中使用的变量。 接下来,我们准备了插入查询并将其分配给 $query 变量。

重要的是要注意,我们使用了 mysqli_real_escape_string 函数来转义我们将在插入查询中使用的字符串值。 当你处理通过 $_POST 变量提交的字符串值时,你必须使用这个函数。 这可确保用户不会将恶意代码注入我们的数据库查询。

最后,我们使用 mysqli_query 函数运行插入查询。 mysqli_query 函数用于对活动数据库运行查询。 最后,我们使用 mysqli_close 函数关闭活动连接。

如何更新记录

在上一节中,我们讨论了如何在 MySQL 表中插入新记录。 在本节中,我们将了解如何更新表中已存在的记录。

我假设 employee 表中已经存在一条记录,并且该记录的 id 为 1。在下面的示例中,我们将更新 id 列中值为 1 的记录。

$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}");
if (!$connection_obj) {
    echo "Error No: " . mysqli_connect_errno();
    echo "Error Description: " . mysqli_connect_error();
    exit;
}
// initialize variables for the insert query 
$id = 1;
$phone = '12345678901';
// prepare the insert query 
$query = "UPDATE employee SET `phone` = '". mysqli_real_escape_string($connection_obj, $phone) ."' WHERE `id` = '". (int) $id ."'";
// run the insert query 
mysqli_query($connection_obj, $query);
// close the db connection 
mysqli_close($connection_obj);

正如我们在上面的示例中看到的,我们想要更新 employee 表中 id 为 1 的电话列。这与插入查询非常相似,只是我们使用的是 UPDATE 而不是 INSERT


如何检索记录

到目前为止,我们已经讨论了如何在 MySQL 表中插入和更新记录。 在本节中,我们将了解如何从 MySQL 表中检索(获取)记录。

看看下面的例子。

$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}");
if (!$connection_obj) {
    echo "Error No: " . mysqli_connect_errno();
    echo "Error Description: " . mysqli_connect_error();
    exit;
}
// prepare the select query 
$query = "SELECT * FROM employee";
// execute the select query 
$result = mysqli_query($connection_obj, $query) or die(mysqli_error($connection_obj));
// run the select query 
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
    echo "ID:" . $row['id'] . "<br/>";
    echo "Name:" . $row['name'] . "<br/>";
    echo "Phone:" . $row['phone'] . "<br/>";
    echo "Email:" . $row['email'] . "<br/>";
    echo "<br/>";
}
// close the db connection 
mysqli_close($connection_obj);

为了从数据库中获取记录,我们需要做的第一件事是使用 mysqli_query 函数执行选择查询。 成功执行选择查询后,mysqli_query 函数返回 mysqli 结果对象,这就是我们存储在上面 $result 变量中的内容。

接下来,我们在 while 循环中使用 mysqli_fetch_array 函数迭代结果集。 mysqli_fetch_array 函数一次从 mysqli 结果集中获取一行。

mysqli_fetch_array 函数有两个参数:结果对象和结果类型。 结果类型指示将从 mysqli_fetch_array 函数返回的数组类型。 它可以是数字的、关联的或两者兼而有之。 这是一个可选参数,我们可以传递以下三个值之一:MYSQLI_ASSOC 、MYSQLI_NUM 或 MYSQLI_BOTH。 MYSQLI_ASSOC 表示你想通过名称访问列,MYSQLI_NUM 表示你想通过列号访问列。

如果我们在 mysqli_fetch_array 函数的第二个参数中传递 MYSQLI_NUM 值,我们可以以 $row[0] 、$row[1] 等方式访问列。 在我们的例子中,我们传递了 MYSQLI_BOTH 值,因此我们可以通过两种方式访问列。 如果只想访问关联值,则可以改用 mysqli_fetch_assoc 函数。

在下一节和最后一节中,我们将了解如何从数据库中删除记录。


如何删除记录

在本节中,我们将了解如何从数据库中删除记录。

看看下面的例子。

$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}");
if (!$connection_obj) {
    echo "Error No: " . mysqli_connect_errno();
    echo "Error Description: " . mysqli_connect_error();
    exit;
}
// initialize variables for the delete query 
$id = 1;
// prepare the insert query 
$query = "DELETE FROM employee WHERE `id` = '". (int) $id ."'";
// run the delete query 
mysqli_query($connection_obj, $query);
// close the db connection 
mysqli_close($connection_obj);

如大家所见,它的工作原理与插入和更新查询几乎相同。 mysqli_query 函数执行 DELETE 查询,最终从 employee 表中删除记录。


总结

在本文中,我们探讨了如何通过 PHP 使用 MySQL 数据库。 本文旨在为初学者提供 PHP 中 MySQL 数据库连接的基本知识。 我们看到了如何从建立数据库连接到执行不同类型的查询。