您想学习如何将 php 连接到 mysql 并执行不同类型的数据库操作吗?在本文中,我们将这样做——我们将讨论 PHP 中的 Mysql 数据库连接。
PHP 提供了不同的方式将 PHP 连接到 MySQL 数据库服务器。在 PHP 5.5 之前,最流行的方法之一是使用 MySQL 扩展——它提供了一种连接到 MySQL 服务器的“过程”方法。但是,从 PHP 5.5 起,该扩展已被弃用,因此我们不打算讨论它。
目前,您的两个选择是 PDO 和 MySQLi。
PDO(PHP 数据对象)扩展支持不同类型的底层数据库服务器以及 MySQL 服务器。因此,如果您决定在将来的任何时候交换底层数据库服务器,它是可移植的。
另一方面,MySQLi 扩展特定于 MySQL 服务器并提供更好的速度和性能。MySQLi 扩展一开始也可能更容易理解,因为它允许您直接编写 SQL 查询。如果您以前使用过 SQL 数据库,这将非常熟悉。然而,PDO 扩展创建了从 SQL 数据库到 PHP 代码的强大映射,让您无需了解 SQL 或数据库的详细信息即可执行大量数据库操作。从长远来看,对于较大的项目,这可以节省大量的编码和调试工作。
在这篇文章中,我将使用 MySQLi 扩展。
创建 MySQL 连接
在本节中,我将向您展示如何从 PHP 脚本连接到 MySQL 服务器并创建连接对象。稍后,此连接对象将用于运行查询、获取输出和操作数据库记录。如前所述,我们将在本文中使用 PHP MySQLi 扩展。
MySQLi 扩展提供了两种不同的方式来执行数据库操作。您可以以面向对象的方式或过程方式使用它,但由于本教程面向初学者,我将坚持使用过程方式。如果您有兴趣查看一些面向对象的片段,可以在下面的评论部分联系我,我很乐意提供它们。
首先,继续在您的文档根目录下创建db_connect.php文件,其中包含以下内容。
<?php
$mysqli_link
= mysqli_connect
(
"{HOST_NAME}"
,
"{dataBASE_USERNAME}"
,
"{DATABASE_PASSWORD}"
,
"{DATABASE_NAME}"
);
if
(mysqli_connect_errno())
{
printf(
"MySQL connection failed with the error: %s"
, mysqli_connect_error());
exit
;
}
请注意,我在mysqli_connect函数中使用了占位符——您必须将它们替换为实际值。
让我们浏览每个占位符,看看它代表什么。
{HOST_NAME}:这代表您的 MySQL 服务器的主机名或 IP 地址。如果您已将 MySQL 服务器与 PHP 安装在同一系统上,则应使用localhost或127.0.0.1. 另一方面,如果您使用的是外部托管的 MySQL 服务器,则可以使用相应的主机名或 IP 地址。
{DATABASE_USERNAME}:这代表您的 MySQL 用户的用户名。基本上,这是您用来连接到 MySQL 服务器的用户名。
{DATABASE_PASSWORD}: 这代表你的 MySQL 用户的密码。同样,这是您用来连接 MySQL 服务器的密码以及 MySQL 用户名。
{DATABASE_NAME}:这是您要连接的 MySQL 数据库的名称。创建连接后,您将查询此数据库以进行进一步操作。
继续用实际值替换这些占位符。就我而言,我已经在本地安装了 MySQL 服务器,并且我有一个 MySQL 用户,其中tutsplus-demo-user作为 MySQL 用户名,tutsplus-demo-password作为 MySQL 密码。有了这个,上面的例子看起来像这样:
<?php
$mysqli_link
= mysqli_connect
(
"localhost"
,
"tutsplus-demo-user"
,
"tutsplus-demo-password"
,
"tutsplus-demo-database"
);
if
(mysqli_connect_errno())
{
printf(
"MySQL connection failed with the error: %s"
, mysqli_connect_error());
exit
;
}
如果您运行此示例,它应该创建一个数据库连接链接并将其分配给$mysqli_link变量,我们稍后将使用它来执行不同类型的数据库操作。
另一方面,如果连接设置有任何问题,该 mysqli_connect_errno函数将返回一个错误代码,该mysqli_connect_error函数将显示实际错误。在上面的示例中,我们将其用于调试目的。
现在,我们已经成功连接到 MySQL 服务器,我们将在下一节中了解如何使用它来执行不同类型的查询。
如何插入记录
在上一节中,我们讨论了如何使用该mysqli_connect函数与 MySQL 服务器建立数据库连接。在本节中,我们将继续讨论如何使用连接对象来执行INSERT查询。
如果您想按照本文中讨论的示例进行操作,则需要在数据库中创建以下 MySQL 表。从现在开始,我们将在所有示例中使用这张表。
CREATE
TABLE
`students` (
`id`
int
(11)
NOT
NULL
AUTO_INCREMENT,
`first_name`
varchar
(255)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
,
`last_name`
varchar
(255)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
,
`email`
varchar
(255)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
,
PRIMARY
KEY
(`id`)
) ENGINE=InnoDB
DEFAULT
CHARSET=utf8mb4
COLLATE
=utf8mb4_unicode_ci;
继续使用 phpMyAdmin 软件或命令行工具创建上面的 MySQL 表。
接下来,让我们创建db_insert.php具有以下内容的文件。请不要忘记用您自己的替换连接参数。
<?php
$mysqli_link = mysqli_connect
("localhost", "tutsplus-demo-user", "tutsplus-demo-password", "tutsplus-demo-database");
if (mysqli_connect_errno())
{
printf("MySQL connection failed with the error: %s", mysqli_connect_error());
exit;
}
$insert_query = "INSERT INTO students(`first_name`,`last_name`,`email`)
VALUES
('". mysqli_real_escape_string($mysqli_link, 'John')
."','". mysqli_real_escape_string($mysqli_link, 'Wood')
."','". mysqli_real_escape_string($mysqli_link, 'john.wood@tutsplus。com') ."')";
// run the insert query
If (mysqli_query($mysqli_link, $insert_query)) {
echo 'Record inserted successfully.';
}
// close the db connection
mysqli_close($mysqli_link);
?>
mysqli_connect首先,如前所述,我们使用该函数建立数据库连接。之后,我们已经准备好稍后要执行的插入查询。重要的是要注意我们已经使用该mysqli_real_escape_string函数来转义我们将在插入查询中使用的字符串值。具体来说,在处理通过变量提交的值时必须使用此函数$_post以避免 SQL 注入。
最后,我们使用了这个mysqli_query函数,它有两个参数。第一个参数是将执行查询的活动连接链接。第二个参数是我们要执行的 MySQL 查询。如果查询成功执行,该mysqli_query函数返回。TRUE
最后,我们使用该mysqli_close函数关闭活动的数据库连接。完成数据库操作后,关闭数据库连接是一种很好的做法。
继续运行脚本,它应该在students表中插入一条记录!
如何更新记录
从 PHP 脚本更新数据库中的记录与插入操作非常相似;唯一的区别是查询将是更新查询而不是插入查询。
让我们修改上面的示例并更新first_name字段,如下例所示。
<?php
$mysqli_link = mysqli_connect
("localhost", "tutsplus-demo-user", "tutsplus-demo-password", "tutsplus-demo-database");
if (mysqli_connect_errno())
{
printf("MySQL connection failed with the error: %s", mysqli_connect_error());
exit;
}
$update_query = "UPDATE students SET `first_name` = '". mysqli_real_escape_string($mysqli_link,'Johnny')
."' WHERE `email` = 'john.wood@tutsplus。com'";
// run the update query
If (mysqli_query($mysqli_link, $update_query)) {
echo 'Record updated successfully.';
}
// close the db connection
mysqli_close($mysqli_link);
?>
继续运行脚本,这应该会更新students表中的记录。
如何选择记录
在前面的部分中,我们讨论了如何通过 PHP 脚本在数据库中插入和更新记录。在本节中,我们将探讨如何使用不同类型的 MySQLi 函数从数据库中获取记录。
首先,您需要使用该mysqli_query函数来执行选择查询。成功执行 select 查询后,该mysqli_query函数返回 mysqli 结果对象,我们可以使用它来遍历 select 查询返回的记录。在从 MySQLi 结果对象中获取和迭代记录时,有不同的功能可用。
mysqli_fetch_all:它允许您一次获取所有结果行。您还可以指定是否要将结果作为关联数组、数值数组或两者兼而有之。
mysqli_fetch_array:它允许您一次检索一行。因此,您必须使用 while 循环来遍历所有记录。同样,您可以指定是否要将结果行作为关联数组、数值数组或两者兼而有之。
mysqli_fetch_assoc:它一次获取一个结果行作为关联数组。
mysqli_fetch_object:它一次获取一个结果行作为对象。
让我们看一下以下示例以了解其工作原理:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php
if (mysqli_connect_errno()) { printf( "MySQL connection failed with the error: %s" , mysqli_connect_error()); exit ; } $select_query = "SELECT * FROM students LIMIT 10" ; $result = mysqli_query( $mysqli_link , $select_query ); while ( $row = mysqli_fetch_array( $result , MYSQLI_ASSOC)) { echo "First Name:" . $row [ 'first_name' ] . "<br/>" ; echo "Last Name:" . $row [ 'last_name' ] . "<br/>" ; echo "Email:" . $row [ 'email' ] . "<br/>" ; echo "<br/>" ; } // close the db connection mysqli_close( $mysqli_link ); ?> |
如您所见,我们使用mysqli_fetch_array带有MYSQLI_ASSOC选项的函数作为第二个参数。因此,它将结果行作为关联数组返回。如果您使用该MYSQLI_NUM选项,您将像$row[0]在上面的示例中$row[1]一样访问它。$row[2]
另一方面,如果您使用mysqli_fetch_object上述示例中的函数,则可以访问以下代码段中显示的值。为简洁起见,我将仅包含 while 循环片段。
01 02 03 04 05 06 07 08 09 10 | … … while ( $row = mysqli_fetch_object( $result )) { echo "First Name:" . $row ->first_name . "<br/>" ; echo "Last Name:" . $row ->last_name . "<br/>" ; echo "Email:" . $row ->email . "<br/>" ; echo "<br/>" ; } ... ... |
所以通过这种方式,您可以从 MySQLi 数据库中获取和显示记录。
如何删除记录
在本节中,我们将了解如何从 PHP 脚本运行删除查询。从数据库中删除记录是一个非常简单的操作,因为您只需要准备删除查询并使用该mysqli_query函数运行它。
让我们通过下面的例子来看看它是如何工作的。
01020304050607080910111213141516171819<?php
$mysqli_link = mysqli_connect
("localhost", "tutsplus-demo-user", "tutsplus-demo-password", "tutsplus-demo-database");
if (mysqli_connect_errno())
{
printf("MySQL connection failed with the error: %s", mysqli_connect_error());
exit;
}
$delete_query = "DELETE FROM students WHERE `email` = 'john.wood@tutsplus。com'";
// run the update query
If (mysqli_query($mysqli_link, $delete_query)) {
echo 'Record deleted successfully.';
}
// close the db connection
mysqli_close($mysqli_link);
?>
如您所见,一切都与我们在插入和更新示例中看到的相同,除了在这种情况下查询是删除查询。
这就是您可以从 PHP 脚本执行不同类型的数据库操作的方式。
至此,我们已经完成了本教程。我们今天到目前为止所讨论的内容应该可以帮助您加强数据库连接概念,特别是如何将 PHP 连接到 MySQL 并执行不同类型的操作。
结论
在本文中,我们讨论了如何使用 MySQLi 扩展将 PHP 连接到 MySQL 数据库。从建立数据库连接到执行不同类型的查询,我们几乎讨论了数据库连接的各个方面。