PHP 编程/PHP 和 MySQL
注意:您应该了解 SQL 才能使用 MySQL。您可以在SQL 书籍中学习。
PHP 与 MySQL 集成良好,并包含一个完整的库,其中包含许多有用的函数来帮助您使用 MySQL。甚至还有许多用 PHP 编写的数据库管理器。
MySQL 不是运行 PHP 的服务器的一部分,它是一个不同的服务器。MySQL 是众多数据库服务器之一,它是开源的,您可以从这里获取。
从 PHP5 开始,MySQLi 集成默认情况下未启用,您应该手动添加它,请参阅这里了解安装说明,PHP4 默认情况下已启用它。
注意:mysql_*() 函数在 PHP 5.6+ 中已弃用,并在 PHP7+ 中删除。请改用 PDO 或 mysqli。
让我们开始吧!
要连接到 MySQL 服务器,您应该使用 mysqli_connect() 函数或 mysqli() 类。它以以下方式使用
mysqli_connect(servername, username, password,database);
servername - 服务器的名称或地址。通常为 'localhost'。username, password - 用于登录服务器的用户名和密码。
database - 您要选择的数据库名称。它是可选的。
虽然不常用,但您可以在一个脚本中连接到多个数据库服务器。连接成功后,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 查询很好,但有时我们可能想要结果(人们很奇怪)。PHP 开发人员就是那些奇怪的人,他们在 PHP 中添加了一些函数来帮助我们解决这个问题
返回结果中的下一行。它作为数组返回,因此您应该将其捕获在一个变量中。
例如
$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_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 }
有时我们想知道从查询结果中获得了多少行。这可以通过类似于这样的方法来完成
$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(); //For the last query executed mysql_info($query); //For $query, what ever that is...
信息以字符串形式返回,虽然它已模板化,但通常不会由脚本分析,而是用于输出。
返回受查询影响的行数,仅适用于 INSERT、UPDATE 或 DELETE 查询
mysqli_affected_rows(); //For the last query executed mysqli_affected_rows($query); //For $query, what ever that is
返回在 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