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
对象的各种属性。
有了这个,我们就可以对提供给 {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 = 'jiyik';
$email = 'jiyik.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 数据库连接的基本知识。 我们看到了如何从建立数据库连接到执行不同类型的查询。
相关文章
使用 Mysqldump 备份 MySQL 中的数据
发布时间:2023/05/09 浏览次数:192 分类:MySQL
-
本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。
更新 MySQL 表中的主键
发布时间:2023/05/09 浏览次数:61 分类:MySQL
-
本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。
在 MySQL 中获取命令历史记录
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史
Oracle 的 decode 函数在 MySQL 中的等价物
发布时间:2023/05/09 浏览次数:115 分类:MySQL
-
本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。
使用 Ubuntu 连接远程 MySQL 服务器的不同方法
发布时间:2023/05/09 浏览次数:97 分类:MySQL
-
在本文中我们将学习如何使用 Ubuntu 连接远程 MySQL 服务器来操作数据以及启动和停止 MySQL 服务器。
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 MySQL 中转换为十进制
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。
在 MySQL 中获取当前日期和时间
发布时间:2023/05/09 浏览次数:145 分类:MySQL
-
本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间
更改 MySQL 服务器中的 max_allowed_packet Size
发布时间:2023/05/09 浏览次数:142 分类:MySQL
-
本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。