PHP连接MySQL数据库详解(附带实例)
PHP 是一种简单、面向对象、解释型、健壮、安全、性能非常高、独立于架构、可移植的动态脚本语言。而 MySQL 是快速和开源的网络数据库系统。PHP 和 MySQL 的结合是目前 Web 开发的黄金组合,那么 PHP 是如何操作 MySQL 数据库的呢?
首先打开 php.ini,找到“;extension=php_mysqli”,去掉该语句前的分号“;”,如下图所示:

图 1 修改PHP.ini文件
保存 php.ini 文件,重新启动 IIS 或 Apache 服务器即可。
配置文件设置完成后,可以通过 phpinfo() 函数来检查是否配置成功,如果显示出的 PHP 环境配置信息中有 mysql 的项目,就表示已经开启了对 MySQL 数据库的支持,如下图所示。

图 2 PHP的环境配置页面
该语句通过此函数连接到 MySQL 数据库,并且把此连接生成的对象传递给名为 $db 的变量,也就是对象 $db。其中,“MySQL服务器地址”为 localhost,“用户名”为root,“用户密码”为本环境 root 设定的密码 753951,“要连接的数据库名”为 adatabase。
默认情况下,MySQL 服务的端口号为 3306,如果采用默认的端口号,可以不用指定;如果采用了其他的端口号,比如采用 3308 端口,则需要特别指定,例如 127.0.0.1:3308,表示 MySQL 服务于本地机器的 3308 端口。

图 3 警告信息
警告信息中,提示用 root 账号无法连接到数据库服务器,并且该警告并不会停止脚本的继续执行。
可见,这样的提示信息会暴露数据库连接的敏感问题,不利于数据库的安全性。如果想提高安全性,避免错误信息的输出,可以加上 @ 屏蔽错误信息,然后加上 die() 函数进行屏蔽的错误处理机制。
例如:
如果数据库连接失败,PHP 会发出警告信息,如下图所示。这是安全连接MySQL数据库服务器的方法。

图 4 警告信息
如果上例的语句变为 $db =mysqli_connect('localhost','root','753951');,一样可以成立。但是,在这但是,在这样的情况下,必须继续选择具体的数据库来进行操作。
如果把前面实例文件中的语句:
修改为以下两个语句:
程序运行效果将完全一样。在新的语句中,mysqli_select_db($db,'adatabase'); 语句确定了“数据库服务器连接对象”为$db,“目标数据库名”为 adatabase。
mysqli_close() 函数的格式为:
mysqli_query() 函数的格式如下:
程序执行后的结果如下图所示:

图 5 程序运行结果
可见,mysqli_query() 函数执行 SQL 语句之后会把结果返回。上例中倒数第 2 行代码就是返回结果并且赋值给 $result 变量。
如果想获取查询、插入、更新和删除操作所影响的行数,需要使用 mysqli_affected_rows() 函数。mysqli_affected_rows() 函数返回前一次 MySQL 操作所影响的行数。语法格式如下:
其中,connection 为必需参数,表示当前的 MySQL 连接。如果返回结果为 0,就表示没有受影响的记录;返回结果为 -1,则表示查询返回错误。
下面通过实例来讲解它们的使用方法和区别。
程序执行后的结果如下图所示:

图 6 程序运行结果
mysqli_fetch_rows() 函数的语法格式如下:
例如:
程序执行后的结果如下图所示。

图 7 程序运行结果
例如:
$row = mysqli_fetch_assoc($result); 语句直接从 $result 结果中取得一行,并且以关联数组的形式返回给 $row。由于获得的是关联数组,因此在读取数组元素的时候要通过字段名称确定数组元素。
该程序的整体运行结果和上一节实例相同。不同的是,这里的程序采用了对象和对象属性的表示方法,但是最后输出的数据结果是相同的。
例如:
1) 在网址主目录下创建 phpmysql 文件夹。
2) 在 phpmysql 文件夹下建立文件 htmlform.html,输入如下代码:
3) 在 phpmysql 文件夹下建立文件 formhandler.php,输入如下代码:
4) 运行 htmlform.html,结果如下图所示。

图 8 htmlform.html页面
5) 在输入框中输入用户名 lili,单击搜索按钮,页面跳转至 formhandler.php,并且返回请求结果,如下图所示:

图 9 formhandler.php页面
PHP访问MySQL数据库的一般步骤
通过 Web 访问数据库的工作过程一般分为以下几个步骤:- 用户使用浏览器对某个页面发出 HTTP 请求。
- 服务器端接收到请求,并发送给 PHP 程序进行处理。
- PHP 解析代码。在代码中有连接 MySQ L数据库命令和请求特定数据库的某些特定数据的 SQL 命令。根据这些代码,PHP 打开一个和 MySQL 的连接,并且发送 SQL 命令到 MySQL 数据库。
- MySQL 接收到 SQL 语句之后加以执行。执行完毕后,返回执行结果到 PHP 程序。
- PHP 执行代码并根据 MySQL 返回的请求结果数据生成特定格式的 HTML 文件,且传递给浏览器。HTML 经过浏览器渲染成为用户请求的展示结果。
PHP连接数据库前的准备工作
默认情况下,从 PHP 5 开始不再自动开启对 MySQL 的支持,而是放到扩展函数库中,所以用户需要在扩展函数库中开启 MySQL 函数库。首先打开 php.ini,找到“;extension=php_mysqli”,去掉该语句前的分号“;”,如下图所示:

图 1 修改PHP.ini文件
保存 php.ini 文件,重新启动 IIS 或 Apache 服务器即可。
配置文件设置完成后,可以通过 phpinfo() 函数来检查是否配置成功,如果显示出的 PHP 环境配置信息中有 mysql 的项目,就表示已经开启了对 MySQL 数据库的支持,如下图所示。

图 2 PHP的环境配置页面
PHP访问MySQL数据库
1) mysqli_connect()函数连接MySQL服务器
PHP 使用 mysqli_connect() 函数连接 MySQL 数据库。mysqli_connect() 函数的格式如下:mysqli_connect('MYSQL服务器地址', '用户名', '用户密码', '要连接的数据库名')例如:
- <?php
- $db=mysqli_connect('localhost','root','753951','adatabase'); //连接数据库
- ?>
默认情况下,MySQL 服务的端口号为 3306,如果采用默认的端口号,可以不用指定;如果采用了其他的端口号,比如采用 3308 端口,则需要特别指定,例如 127.0.0.1:3308,表示 MySQL 服务于本地机器的 3308 端口。
如果数据库连接失败,PHP 会发出警告信息,如下图所示。提示,localhost 换成本地地址或者 127.0.0.1 都能实现同样的效果。

图 3 警告信息
警告信息中,提示用 root 账号无法连接到数据库服务器,并且该警告并不会停止脚本的继续执行。
可见,这样的提示信息会暴露数据库连接的敏感问题,不利于数据库的安全性。如果想提高安全性,避免错误信息的输出,可以加上 @ 屏蔽错误信息,然后加上 die() 函数进行屏蔽的错误处理机制。
例如:
- <?php
- $db=@mysqli_connect('localhost','root','666666','adatabase')
- or die("无法连接到服务器"); //连接数据库
- print("成功连接到服务器");
- mysqli_close($db);
- ?>

图 4 警告信息
2) 使用mysqli_select_db()函数更改默认的数据库
连接到数据库以后,如果需要更改默认的数据库,可以使用函数 mysqli_select_db()。它的格式为:mysqli_select_db(数据库服务器连接对象,更改后数据库名)前面实例中的 $db = mysqli_connect('localhost','root','753951','adatabase'); 语句已经通过传递参数值 adatabase 确定了需要操作的默认数据库。如果不传递此参数,mysqli_connect() 函数只提供“MYSQL服务器地址”“用户名”和“用户密码”,一样可以连接到 MySQL 数据库服务器并且以相应的用户登录。
如果上例的语句变为 $db =mysqli_connect('localhost','root','753951');,一样可以成立。但是,在这但是,在这样的情况下,必须继续选择具体的数据库来进行操作。
如果把前面实例文件中的语句:
- $db = mysqli_connect('localhost','root','753951','adatabase');
- $db = mysqli_connect('localhost','root','753951');
- mysqli_select_db($db,'adatabase');
3) 使用mysqli_close()函数关闭MySQL连接
在连接数据库时,可以使用 mysqli_connect() 函数。与之相对应,在完成了一次对服务器的使用的情况下,需要关闭此连接,以免对 MySQL 服务器中的数据进行误操作,并对资源进行释放。一个服务器的连接也是一个对象型的数据类型。mysqli_close() 函数的格式为:
mysqli_close(需要关闭的数据库连接对象)前面实例程序中,mysqli_close($db); 语句关闭了“需要关闭的数据库连接对象”为 $db 对象。
4) 使用mysqli_query()函数执行SQL语句
使用 mysqli_query() 函数执行 SQL 语句,需要向此函数中传递两个参数,一个是 MySQL 数据库服务器连接对象;另一个是以字符串表示的 SQL 语句。mysqli_query() 函数的格式如下:
mysqli_query(数据库服务器连接对象,SQL语句)在运行下面的实例前,用户要在 MySQL 服务器上创建 adatabase 数据库,添加数据表 user,数据表 user 主要包括 Id(工号)、Name(姓名)、Age(年龄)、Gender(性别)和 Info(个人信息)字段。
- <?php
- $db=@mysqli_connect('localhost','root','753951','adatabase')
- or die("无法连接到服务器"); //连接数据库
- //执行插入数据操作
- $sql = "insert into user(Id,Name,Age,Gender,Info)
- values(1,'lili',17,'female','She is a 17 years lady'),
- (2,'xiaoming',19,'female','She is a 19 years lady'),
- (3,'huahua',20,'female','She is a 20 years lady'),
- (4,'fangfang',18,'female','She is a 18 years lady')";
- $result = mysqli_query($db,$sql); //$result 为 boolean 类型
- if ($result) {
- echo "插入数据成功!<br/>";
- } else {
- echo "插入数据失败!<br/>";
- }
- // 执行更新数据操作
- $sql = "update user set Name='张芳' where Name='fangfang'";
- $result = mysqli_query($db,$sql);
- if($result) {
- echo "更新数据成功!<br/>";
- } else {
- echo "更新数据失败!<br/>";
- }
- // 执行查询数据操作
- $sql = "select * from user";
- $result = mysqli_query($db,$sql); //如果查询成功,$result 为资源类型,保存查询结果集
- mysqli_close($db);
- ?>

图 5 程序运行结果
可见,mysqli_query() 函数执行 SQL 语句之后会把结果返回。上例中倒数第 2 行代码就是返回结果并且赋值给 $result 变量。
5) 获取查询结果集中的记录数
使用 mysqli_num_rows() 函数获取查询结果包含的数据记录的条数,只需要给出返回的数据对象即可。语法格式如下:mysqli_num_rows(result);其中 result 指查询结果对象,此函数只对 select 语句有效。
如果想获取查询、插入、更新和删除操作所影响的行数,需要使用 mysqli_affected_rows() 函数。mysqli_affected_rows() 函数返回前一次 MySQL 操作所影响的行数。语法格式如下:
- mysqli_affected_rows(connection)
下面通过实例来讲解它们的使用方法和区别。
- <?php
- $db=@mysqli_connect('localhost','root','753951','adatabase')
- or die("无法连接到服务器"); //连接数据库
- //执行查询数据操作
- $sq = "select * from user";
- $result = mysqli_query($db,$sq);//如果查询成功,$result为资源类型,保存查询结果集
- echo"查询结果有".mysqli_num_rows($result)."条记录" <br/>;//输出查询记录集的行数
- // 执行更新数据操作
- $sq = "update user set Name='mingming' where Name='张芳'";
- $result = mysqli_query($db,$sq);
- echo "更新了".mysqli_affected_rows($db). "条记录"; //输出更新记录集的行数
- mysqli_close($db);
- ?>

图 6 程序运行结果
6) 获取结果集中的一条记录作为枚举数组
执行 select 查询操作后,使用 mysqli_fetch_rows() 函数可以从查询结果中取出数据。如果想逐行取出每条数据,可以结合循环语句循环输出。mysqli_fetch_rows() 函数的语法格式如下:
mysqli_fetch_rows (result);其中,result 指查询结果对象。
例如:
- <?php
- $db=@mysqli_connect('localhost','root','753951','adatabase')
- or die("无法连接到服务器"); //连接数据库
- //执行查询数据操作
- $sql = "select * from user";
- $result = mysqli_query($db,$sql);//如果查询成功,$result 为资源类型,保存查询结果集
- ?>
- <table width="370" border="1" cellspacing="0" cellpadding="0">
- <tr><th>编号</th><th>姓名</th><th>年龄</th><th>性别</th><th>个人信息</th></tr>
- <?php
- while($row = mysqli_fetch_row($result)) { //逐行获取结果集中的记录,并显示在表格中
- ?>
- <tr>
- <td><?php echo $row[0] ?></td> <!-- 显示第一列 -->
- <td><?php echo $row[1] ?></td> <!-- 显示第二列 -->
- <td><?php echo $row[2] ?></td> <!-- 显示第三列 -->
- <td><?php echo $row[3] ?></td> <!-- 显示第四列 -->
- <td><?php echo $row[4] ?></td> <!-- 显示第五列 -->
- </tr>
- <?php }
- mysqli_close($db);
- ?>

图 7 程序运行结果
7) 获取结果集中的记录作为关联数组
使用 mysqli_fetch_assoc() 函数从数组结果集中获取信息,只要确定 SQL 请求返回的对象就可以了。语法格式如下:mysqli_ fetch_assoc (result);此函数与 mysqli_fetch_rows() 函数的不同之处就是返回的每一条记录都是关联数组。注意,该函数返回的字段名是区分大小写的。
例如:
- <?php
- while($row = mysqli_fetch_assoc($result)) { // 逐行获取结果集中的记录
- ?>
- <tr>
- <td><?php echo $row["Id"] ?></td> <!-- 获取当前行“Id”字段值 -->
- <td><?php echo $row["Name"] ?></td> <!-- 获取当前行“Name”字段值 -->
- <td><?php echo $row["Age"] ?></td> <!-- 获取当前行“Age”字段值 -->
- <td><?php echo $row["Gender"] ?></td> <!-- 获取当前行“Gender”字段值 -->
- <td><?php echo $row["Info"] ?></td> <!-- 获取当前行“Info”字段值 -->
- </tr>
- <?php }
- mysqli_close($db);
- ?>
8) 获取结果集中的记录作为对象
使用 mysqli_fetch_object() 函数从结果中获取一行记录作为对象。语法格式如下:mysqli_fetch_object (result);例如:
- <?php
- while($row = mysqli_fetch_object($result)) { // 逐行获取结果集中的记录
- ?>
- <tr>
- <td><?php echo $row->Id ?></td> <!-- 获取当前行“Id”字段值 -->
- <td><?php echo $row->Name ?></td> <!-- 获取当前行“Name”字段值 -->
- <td><?php echo $row->Age ?></td> <!-- 获取当前行“Age”字段值 -->
- <td><?php echo $row->Gender ?></td> <!-- 获取当前行“Gender”字段值 -->
- <td><?php echo $row->Info ?></td> <!-- 获取当前行“Info”字段值 -->
- </tr>
- <?php }
- mysqli_close($db);
- ?>
9) 使用mysqli_fetch_array()函数获取结果集记录
mysqli_fetch_array()函数的语法格式如下:mysqli_fetch_ array (result[,resuilt_type])参数 resuilt_type 是可选参数,表示一个常量,可以选择 MYSQL_ASSOC(关联数组)、MYSQL_NUM(数字数组)和 MYSQL_BOTH(二者兼有),本参数的默认值为 MYSQL_BOTH。
例如:
- <?php
- while($row = mysqli_fetch_array($result)) { // 逐行获取结果集中的记录
- ?>
- <tr>
- <td><?php echo $row["Id"] ?></td> <!-- 使用字段名做索引显示字段值 -->
- <td><?php echo $row["1"] ?></td> <!-- 使用数字做索引显示字段值 -->
- <td><?php echo $row["Age"] ?></td>
- <td><?php echo $row["3"] ?></td>
- <td><?php echo $row["Info"] ?></td>
- </tr>
- <?php }
- mysqli_close($db);
- ?>
10) 使用mysqli_free_result()函数释放资源
释放资源的函数为 mysqli_free_result(),函数的格式为:mysqli_free_result(SQL请求所返回的数据库对象)在一切操作都基本完成以后,程序通过 mysqli_free_result($result); 语句释放了 SQL 请求所返回的对象 $result 所占用的资源。
PHP操作数据库实战演练
下面以通过 Web 向 user 数据库请求数据为例,介绍如何使用 PHP 函数处理 MySQL 数据库数据,具体步骤如下:1) 在网址主目录下创建 phpmysql 文件夹。
2) 在 phpmysql 文件夹下建立文件 htmlform.html,输入如下代码:
- <html>
- <head>
- <meta charset="UTF-8">
- <title>Finding User</title>
- </head>
- <body>
- <h2>从数据表 user 中查询数据</h2>
- <form action="formhandler.php" method="post">
- 姓名:
- <input name="username" type="text" size="20"/> <br />
- <input name="submit" type="submit" value="搜索"/>
- </form>
- </body>
- </html>
3) 在 phpmysql 文件夹下建立文件 formhandler.php,输入如下代码:
- <?php
- $username = $_POST['username'];
- if(!$username){
- echo "Error: There is no data passed.";
- exit;
- }
- $username = addslashes($username);
- @ $db = mysqli_connect('localhost','root','','adatabase');
- if(mysqli_connect_errno()){
- echo "Error: Could not connect to mysql database.";
- exit;
- }
- $q = "SELECT * FROM user WHERE name = '".$username."'";
- $result = mysqli_query($db,$q);
- $rownum = mysqli_num_rows($result);
- for($i=0; $i<$rownum; $i++){
- $row = mysqli_fetch_assoc($result);
- echo "编号:".$row['Id']."<br />";
- echo "姓名:".$row['Name']."<br />";
- echo "年龄:".$row['Age']."<br />";
- echo "性别:".$row['Gender']."<br />";
- echo "个人信息:".$row['Info']."<br />";
- }
- mysqli_free_result($result);
- mysqli_close($db);
- ?>
4) 运行 htmlform.html,结果如下图所示。

图 8 htmlform.html页面
5) 在输入框中输入用户名 lili,单击搜索按钮,页面跳转至 formhandler.php,并且返回请求结果,如下图所示:

图 9 formhandler.php页面