跳转到内容

PHP 编程/PHP 和 MySQL

来自维基教科书,开放的书籍,开放的世界

注意:您应该了解 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_select_db(),但前提是您没有在 mysqli_connect() 中定义它。

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 中添加了一些函数来帮助我们解决这个问题

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
}

mysqli_fetch_array()

[编辑 | 编辑源代码]

此函数与mysqli_fetch_row()的功能完全相同,只是它返回一个关联数组。

$query1 = mysqli_query($conn,"SELECT id, name, address FROM phone_book");

$person = mysqli_fetch_array($con,$query1);

print_r($person);

应该输出类似于这样的内容

Array
{
    [id] => 1
    [name] => Sharon
    [address] => Helm, 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 查询,也适用于许多类型的查询。这些查询在许多情况下都很有用。

mysqli_info()

[编辑 | 编辑源代码]

将返回有关最后执行的查询的信息,或有关您向其发送资源的查询的信息

mysqli_info();    //For the last query executed
mysql_info($query); //For $query, what ever that is...

信息以字符串形式返回,虽然它已模板化,但通常不会由脚本分析,而是用于输出。

mysqli_affected_rows()

[编辑 | 编辑源代码]

返回受查询影响的行数,仅适用于 INSERT、UPDATE 或 DELETE 查询

mysqli_affected_rows();       //For the last query executed
mysqli_affected_rows($query); //For $query, what ever that is

mysqli_insert_id()

[编辑 | 编辑源代码]

返回在 INSERT 查询后 MySQL 分配给表中 auto_increment 列的 ID。

$result = mysqli_query($con,"INSERT 'Bob' INTO names(firstname)");
$new_id = mysqli_insert_id();

注意:你应该在执行查询后立即调用 mysqli_insert_id()。如果在 mysqli_insert_id() 之间发出另一个语句,它将返回 NULL!

关闭连接

[编辑 | 编辑源代码]

你应该使用 mysqli_close() 来关闭 MySQL 连接。这通常会关闭最后一个打开的连接,当然,你可以向它发送一个连接标识符。

mysqli_close();  //Close the last connection opened
mysqli_close($con); //Close connection $con


华夏公益教科书