PHP编程
PHP 和 MySQL 与 PostgreSQL
介绍
注意:你需要了解 SQL 才能使用 MySQL。你可以在 SQL 书籍中学习它。
PHP 与 MySQL 集成得很好,并且提供了一个包含大量有用函数的库来帮助你使用 MySQL。甚至有许多用 PHP 编写的数据库管理工具。
MySQL 不是运行 PHP 的服务器的一部分,它是一个独立的服务器。MySQL 是许多数据库服务器之一,它是开源的,你可以在这里获得它。
从 PHP5 开始,MySQLi 集成默认没有启用,你需要手动添加,安装说明可以参考此处,PHP4 默认启用。
注意:mysql_*()
函数在 PHP 5.6+ 中已废弃,并在 PHP7+ 中移除。应使用 PDO 或 MySQLi 替代。
让我们开始吧!
连接到 MySQL 服务器
要连接到 MySQL 服务器,应该使用 mysqli_connect()
函数或 mysqli()
类。其用法如下:
mysqli_connect(servername, username, password, database);
- servername:服务器的名称或地址。通常是 'localhost'。
- username, password:用于登录服务器的用户名和密码。
- database:你想选择的数据库名称。这个参数是可选的。
多个 MySQL 连接
尽管不常用,但你可以在一个脚本中连接多个数据库服务器。成功连接后,mysqli_connect()
会返回一个指向服务器的引用,你可以将其捕获到一个变量中:
$con = mysqli_connect("localhost", "root", "123");
$con2 = mysqli_connect("http://www.example.com/", "root", "123");
选择数据库
为了执行大多数操作(当然,除了创建、删除和列出数据库),你必须选择一个数据库。若没有在 mysqli_connect()
中定义数据库名称,则使用 mysqli_select_db()
来选择数据库。
mysqli_select_db(db_name);
其中,db_name
是数据库名称。
默认情况下,mysqli_select_db()
会尝试选择最后打开的 MySQL 连接中的数据库。因此,在以下代码中,mysqli_select_db()
会尝试选择 "example.com" 服务器上的数据库:
$con = mysqli_connect("localhost", "root", "123");
$con2 = mysqli_connect("example.com:3306", "root", "123");
mysqli_select_db("database1");
该函数还可以接受第二个可选参数,你可以使用它来选择与最后打开的数据库不同的数据库:
$con = mysqli_connect("localhost", "root", "123");
$con2 = mysqli_connect("example.com:3306", "root", "123");
mysqli_select_db("database1", $con);
执行查询
要执行查询,使用 mysqli_query()
函数。例如:
mysqli_query($con, "UPDATE table1 SET column1='value1', column2='value2' WHERE column3='value3'");
重要提示:
mysqli_query()
返回一个资源链接,在某些操作中需要使用此资源。因此,应该将其存储在一个变量中以便后续使用:
$query1 = mysqli_query($con, "UPDATE table1 SET column1='value1', column2='value2' WHERE column3='value3'");
用于 SELECT 查询的函数
执行 SELECT 查询本身很简单,但有时我们可能需要获取查询结果(PHP 开发者通常会这样做)。因此,PHP 提供了一些函数来帮助我们处理查询结果:
1. mysqli_fetch_row()
此函数返回结果中的下一行,作为一个数组。你可以将它捕获到一个变量中:
$query1 = mysqli_query($con, "SELECT id, name, address FROM phone_book");
$person = mysqli_fetch_row($query1);
print_r($person);
这将输出类似如下内容:
Array
{
[0] => 1
[1] => Sharon
[2] => Helm, 3
}
这个函数将一直返回结果中的下一行,直到没有更多的行,返回 false
。一个常见的用法是与 while
循环一起使用,例如:
$query1 = mysqli_query($con, "SELECT id, name, address FROM phone_book");
while($person = mysqli_fetch_row($query1)) {
print_r($person);
echo "\n";
}
这将输出如下内容:
Array
{
[0] => 1
[1] => Sharon
[2] => Helm, 3
}
Array
{
[0] => 2
[1] => Adam
[2] => 23rd street, 5
}
Array
{
[0] => 3
[1] => Jane
[2] => Unknown
}
2. mysqli_fetch_array()
此函数的作用与 mysqli_fetch_row()
相同,不同之处在于它返回一个关联数组,而不是数字索引数组。
$query1 = mysqli_query($con, "SELECT id, name, address FROM phone_book");
$person = mysqli_fetch_array($query1);
print_r($person);
这将输出:
Array
{
[id] => 1
[name] => Sharon
[address] => Helm, 3
}
3. mysqli_num_rows()
有时我们希望知道查询结果中有多少行。可以使用以下方式:
$counter = 0;
$query1 = mysqli_query($con, "SELECT id, name, address FROM phone_book");
while(mysqli_fetch_row($query1)) {
$counter++;
}
此时,$counter
变量会存储从查询中获得的行数,但 PHP 提供了一个更简便的函数来处理这个问题:
$query1 = mysqli_query($con, "SELECT id, name, address FROM phone_book");
$counter = mysqli_num_rows($query1);
$counter
现在存储的值与上面相同,但这样更简洁。
用于其他查询的函数
以下函数不仅适用于 SELECT 查询,还适用于许多类型的查询。它们在很多情况下都非常有用。
1. mysqli_info()
此函数返回有关最后执行的查询的信息,或者关于你传入的查询资源的信息:
mysqli_info(); // 获取最后执行的查询信息
mysqli_info($query); // 获取指定查询的相关信息
返回的是一个字符串,虽然它是模板化的,但通常不用于脚本分析,而是作为输出使用。
2. mysqli_affected_rows()
此函数返回受查询影响的行数,仅适用于 INSERT
、UPDATE
或 DELETE
查询:
mysqli_affected_rows(); // 获取最后执行的查询影响的行数
mysqli_affected_rows($query); // 获取指定查询影响的行数
3. mysqli_insert_id()
此函数返回在执行 INSERT
查询后,MySQL 为自动递增列分配的 ID。
$result = mysqli_query($con, "INSERT INTO names (firstname) VALUES ('Bob')");
$new_id = mysqli_insert_id();
注意:应在执行查询后立即调用 mysqli_insert_id()
。如果在调用 mysqli_insert_id()
之前执行了其他语句,它将返回 NULL
。
关闭连接
执行完数据库操作后,应使用 mysqli_close()
来关闭 MySQL 连接。通常情况下,这会关闭最后打开的连接,但当然,你也可以传入一个连接标识符来关闭特定的连接:
mysqli_close(); // 关闭最后打开的连接
mysqli_close($con); // 关闭指定连接 $con