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 数据库连接的基本知识。 我们看到了如何从建立数据库连接到执行不同类型的查询。
相关文章
如何在 MySQL 中声明和使用变量
发布时间:2024/03/26 浏览次数:115 分类:MySQL
-
当你需要在 MySQL 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。
在 MySQL 中使用 Mysqladmin 刷新主机解除阻塞
发布时间:2024/03/26 浏览次数:82 分类:MySQL
-
你将了解阻止主机的原因。此外,通过使用 phpMyAdmin 和命令提示符刷新主机缓存来解除阻塞的不同方法和效果。