PHP操作mysql数据库
Posted 飞鱼0725
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP操作mysql数据库相关的知识,希望对你有一定的参考价值。
php向mysql发送数据、PHP操作MySQL数据库是重点中的重点。
为大家举一些例子:
- 要注册一个用户,是将表单的数据POST发送给PHP写入数据库
- 购买一个商品,是将商品信息和用户信息通过PHP写入到数据库
- 在线付费,是将用户的充值信息通过PHP写入数据库
- 修改头像上传的头像地址得到后,通过PHP修改数据库里头像字段的值
注意:
从PHP7开始默认不再支持mysql扩展,即不再支持mysql_*系列函数。请使用mysqli连接数据库。
mysqli即支持php5也支持php7。
一、数据库连接步骤
第一步:连接数据库服务器
类型 | 说明 |
---|---|
函数 | mysqli_connect |
功能 | 连接到mysql数据库服务器 |
参数1 | 主机 |
参数2 | 数据库服务器登陆名 |
参数3 | 密码 |
参数4 | 数据库的名称 |
参数5 | 数据库服务器端口不填默认3306 |
若参数4,数据库名称在此步已填并择,不需要执行第三步。
第二步:判断错误
类型 | 说明 |
---|---|
函数 | mysqli_errno |
功能 | 返回连接错误号,无错误返回0 |
参数1 | 传入mysqli_connect返回的资源 |
类型 | 说明 |
---|---|
函数 | mysqli_error |
功能 | 返回连接错误字符串 |
参数1 | 传入mysqli_connect返回的资源 |
第三步:选择数据库
类型 | 说明 |
---|---|
函数 | mysqli_select_db |
功能 | 选择本连接中的数据库 |
参数1 | 传入mysqli_connect返回的资源 |
参数2 | 需要连接的数据库名 |
若在第一步已填数据库,不需要更换成其他数据库,则不需要执行第三步。
第四步:设置字符集
类型 | 说明 |
---|---|
函数 | mysqli_set_charset |
功能 | 设置与mysql服力器连接,结果,校验字符集 |
参数1 | 传入mysqli_connect返回的资源 |
参数2 | 字符集类型 |
第五步:准备SQL语句
其实就是一个SQL语句字符集。
第六步:发送SQL语句
类型 | 说明 |
---|---|
函数 | mysqli_query |
功能 | 发送SQL语句 |
参数1 | 传入mysqli_connect返回的资源 |
参数2 | 传入发送的SQL语句 |
SQL语句准备完成,需要通过mysqli_query将SQL语句发送给MySQL服务器。
第七步:判断是否执行正常或者遍历数据
第6步中,发送的是select类别的语句,通常需要将结果输出显示出来。就需要用到遍历显示数据的函数。
类型 | 说明 |
---|---|
函数 | mysqli_fetch_array |
功能 | 得到result结果集中的数据,返回数组进行便利 |
参数1 | 传入查询出来的结果变量 |
参数2 | 传入MYSQLI_NUM返回索引数组,MYSQLI_ASSOC返回关联数组,MYSQLI_BOTH返回索引和关联 |
类型 | 说明 |
---|---|
函数 | mysqli_fetch_assoc |
功能 | 得到result结果集中的数据,返回关联数组进行便利 |
参数1 | 传入查询出来的结果变量 |
类型 | 说明 |
---|---|
函数 | mysqli_fetch_row |
功能 | 得到result结果集中的数据,返回索引数组进行便利 |
参数1 | 传入查询出来的结果变量 |
类型 | 说明 |
---|---|
函数 | mysqli_fetch_object |
功能 | 得到result结果集中的数据,返回对象进行遍历 |
参数1 | 传入查询出来的结果变量 |
类型 | 说明 |
---|---|
函数 | mysqli_num_rows |
功能 | 返回查询出来的结果总数 |
参数1 | 传入查询出来的结果变量 |
类型 | 说明 |
---|---|
函数 | mysqli_num_rows |
功能 | 返回查询出来的结果总数 |
参数1 | 传入查询出来的结果变量 |
注 | 实际工作中用得非常少,了解 |
写入
第6步中,如果发送的是insert的语句,通常需要得到是否执行成功,或者同时拿到自增的ID。
类型 | 说明 |
---|---|
函数 | mysqli_fetch_field |
功能 | 遍历数据行 |
参数1 | 传入查询出来的结果变量 |
第八步:关闭数据库
类型说明函数mysqli_close功能关闭数据库连接参数1传入mysqli_connect返回的资源
数据库连接是一个资源类型。我们在之前的章节中讲解资源类型的时候跟大家说过。凡是涉及到数资源类型的有打开就有关闭。这样能够保证PHP更高效的处理和回收资源。
因此,数据库连接成功后,不需要使用的时候。我们可以关闭这个连接。
注意:
mysqli只学过程化的方法即可。在面向对象阶段实际工作中完全抛弃了mysqli的对象用法,而是使用的是PDO对象连接数据库的方式。
PHP数据库操作之把用户做个分页
在真实的项目中,我们是将主机、用户名、密码、库都写在配置文件当中。
如果在代码中写死了,万一数据库服务器的相关信息发生变化了,要把所有代码修改一次显然不符合程序员的思维。
此外,在每一个需要连接数据库的页面中。我们都需要写上连接、判断错误、设置字符太过于麻烦。并且不利于重复使用这些代码。
我们可以用之前讲过的include系列函数达成目标:
因此,我们可以做一个配置文件config.php。将需要使用到的配置全部设置为常量,代码如下:
<?php //数据库服务器 define(\'DB_HOST\', \'localhost\'); //数据库用户名 define(\'DB_USER\', \'root\'); //数据库密码 define(\'DB_PWD\', \'secret\'); //库名 define(\'DB_NAME\', \'book\'); //字符集 define(\'DB_CHARSET\', \'utf8\'); ?>
我们将connection.php页面抽取出来,以后需要连接数据库的时候只需要包含connection.php文件即可。代码如下:
<?php include \'config.php\'; $conn = mysqli_connect(DB_HOST, DB_USER, DB_PWD, DB_NAME); if (mysqli_errno($conn)) {
mysqli_error($conn);
exit;
}
mysqli_set_charset($conn, DB_CHARSET); ?>
我们在以后每个文件使用中直接包含 connection.php文件就可以实现数据库连接了:
include \'connection.php\';
把上面的准备工作完成,接下来完成分页。分页效果如下:
页要实现分页中包含以下几个基本元素:
元素 | 说明 | 备注 |
---|---|---|
首页 | 最开始进入到页面的第一页 | 用get传参才进去时默认为1 |
上一页 | 当前页减1 | 如果页码为第一页时减1,为应该为第一页 |
下一页 | 当前页加1 | 如果为最后一 |
尾页 | 最后一页 | 总条数除以每页显示数得到总页数 |
当前页 | 当前所在的页码 | 就是当前的页码 |
总页数 | 一共有多少个页面 | 总条数除以每页显示数 |
我们在控制页码的时候,都是通过URL地址栏传入页码值来实现的页码控制。在page.php后面接上页码的相关信息,我们就能够算出更多的有效信息。url控制分页的效果如下:
在代码实现中,是通过limit后的偏移量(offset)和数量(num),这两个值真正实现的分页。
页码 | url中get值 | limit偏移量,数量 |
---|---|---|
第1页 | 1 | 0,5 |
第2页 | 2 | 5,5 |
第3页 | 3 | 10,5 |
第n页 | n | (n-1)*5,5 |
我们通过代码来实现业务:
(1)计算出分页所需的参数
(2)SQL语句
我们之前说过分页的核心是通过SQL语句中的offset和num来控制每页显示数。
我们在上面还列了具体的公式,我们将公司转化为代码如下:
$num = 5; $offset = ($page - 1) * $num;
我们将$num和$offset应用于SQL语句中:
$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";
控制好URI中的分页值
echo \'<tr> <td colspan="5"> <a href="page.php?page=1">首页</a> <a href="page.php?page=\' . ($page - 1) . \'">上一页</a> <a href="page.php?page=\' . ($page + 1) . \'">下一页</a> <a href="page.php?page=\' . $total . \'">尾页</a> 当前是第 \' . $page . \'页 共\' . $total . \'页 </td> </tr>\';
我们最后将整体业务串联起来实现最终效果,代码如下:
include \'connection.php\'; $count_sql = \'select count(id) as c from user\'; $result = mysqli_query($conn, $count_sql); $data = mysqli_fetch_assoc($result); //得到总的用户数 $count = $data[\'c\']; $page = isset($_GET[\'page\']) ? (int) $_GET[\'page\'] : 1; /* if (isset($_GET[\'page\'])) { $page = (int) $_GET[\'page\']; } else { $page = 1; } */ //每页显示数 $num = 5; //得到总页数 $total = ceil($count / $num); if ($page <= 1) { $page = 1; } if ($page >= $total) { $page = $total; } $offset = ($page - 1) * $num; $sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num"; $result = mysqli_query($conn, $sql); if ($result && mysqli_num_rows($result)) { //存在数据则循环将数据显示出来 echo \'<table width="800" border="1">\'; while ($row = mysqli_fetch_assoc($result)) { echo \'<tr>\'; echo \'<td>\' . $row[\'username\'] . \'</td>\'; echo \'<td>\' . date(\'Y-m-d H:i:s\', $row[\'createtime\']) . \'</td>\'; echo \'<td>\' . long2ip($row[\'createip\']) . \'</td>\'; echo \'<td><a href="edit.php?id=\' . $row[\'id\'] . \'">编辑用户</a></td>\'; echo \'<td><a href="delete.php?id=\' . $row[\'id\'] . \'">删除用户</a></td>\'; echo \'</tr>\'; } echo \'<tr><td colspan="5"><a href="page.php?page=1">首页</a> <a href="page.php?page=\' . ($page - 1) . \'">上一页</a> <a href="page.php?page=\' . ($page + 1) . \'">下一页</a> <a href="page.php?page=\' . $total . \'">尾页</a> 当前是第 \' . $page . \'页 共\' . $total . \'页 </td></tr>\'; echo \'</table>\'; } else { echo \'没有数据\'; } mysqli_close($conn);
php数据库操作之数据显示乱码终极解决办法
php连接mysql乱码是开发过程当中,这是开发中新手经常遇到的问题。 根据实际大家遇到的问题,将乱码的问题,总结成了9个要点来彻底解决连接后乱码的问题。
解决乱码问题的核心思想,就是:一定要多个不同的文件系统中一定要统一编码。
这9个要点分别是:
1.html编码与MySQL编码一致
2.PHP编码与MySQL编码一致
3.若有header头发送字符集,请与数据库一样
4.<meta http-equiv=“Content-Type”content=“text/html; charset=utf-8” />要和页面的文字编码一致
5.数据库建库的字符集要统一
6.表的字符集要统一
7.列的字符集要统一(表设了,列就默认写表的)
8.连接,校验的字符集要统一
9.结果集的字符集要统一
以上是关于PHP操作mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章