PHP操作mysql数据库

PHP向MySQL发送数据、PHP操作MySQL数据库是重点中的重点。

为大家举一些例子:

  1. 要注册一个用户,是将表单的数据POST发送给PHP写入数据库
  2. 购买一个商品,是将商品信息和用户信息通过PHP写入到数据库
  3. 在线付费,是将用户的充值信息通过PHP写入数据库
  4. 修改头像上传的头像地址得到后,通过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';

把上面的准备工作完成,接下来完成分页。分页效果如下:

2015-10-13_561c9c536b206.png

页要实现分页中包含以下几个基本元素:

元素

说明

备注

首页

最开始进入到页面的第一页

用get传参才进去时默认为1

上一页

当前页减1

如果页码为第一页时减1,为应该为第一页

下一页

当前页加1

如果为最后一

尾页

最后一页

总条数除以每页显示数得到总页数

当前页

当前所在的页码

就是当前的页码

总页数

一共有多少个页面

总条数除以每页显示数

我们在控制页码的时候,都是通过URL地址栏传入页码值来实现的页码控制。在page.php后面接上页码的相关信息,我们就能够算出更多的有效信息。url控制分页的效果如下:

QQ截图20161114161938.png

在代码实现中,是通过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.结果集的字符集要统一

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

KVM调整cpu和内存

一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid