小米技术社区
小米技术社区管理员 关于小米

27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]

E-mail:mzze@163.com

Q Q:32362389

W X:xiaomi168527

小米技术社区大牛王飞 关于王飞

27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]

E-mail:wf_live@126.com

Q Q:3940019

微博:王小贱ss

小米技术社区设计小艳 关于小艳

大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]

E-mail:97157726@qq.com

Q Q:97157726

标签云
精品推荐
您的位置:首页 > 后端编程 > 数据库 > mysql

PHP的mysqli扩展;连接数据库,操作数据库,查询数据库的方法

分类: mysql32个赞

首先在php.ini中开启mysqli扩展

extension=php_mysqli.dll

开启扩展后重启服务器,就可以使用mysqli_函数了

我们通过连接数据库、操作数据库、查询数据库来了解mysqlli的使用方法:


在介绍前我们先创建news数据库并插入测试数据

drop table if exists news;
create table news(
       id int unsigned auto_increment primary key comment '主键',
       title varchar(20) not null comment '标题',
       content text not null comment '内容',
       createtime int not null comment '添加时间'
)engine=innodb charset=utf8 comment '新闻表';

-- 插入测试数据
insert into news values (null,'锄禾','锄禾日当午',unix_timestamp());
insert into news values (null,'草','离离原上草',unix_timestamp());

思考:时间字段可以用datetime类型,也可以使用int类型。一般用int,因为datetime占用8个字节,int占用4个字节。


一、连接数据库


相关语法:

mysqli_connect(主机IP,用户名,密码,数据库名,端口号) //如果端口号是3306可以省略
mysqli_connect_error():获取连接数据库的错误信息
mysqli_connect_errno():获取连接数据库的错误编码
mysqli_set_charset(连接对象,字符编码)

案例

<?php
//连接数据库,连接成功返回连接对象
$link=@mysqli_connect('localhost','root','root','data','3306');
//var_dump($link);          //object(mysqli)
if(mysqli_connect_error()){
    echo '错误号:'.mysqli_connect_errno(),'<br>';    //显示错误编码
    echo '错误信息:'.mysqli_connect_error();        //显示错误信息
    exit;
}
//设置字符编码
mysqli_set_charset($link,'utf8');

注:与数据库相关的编码用utf8,与页面显示相关用utf-8


二、操作数据数据库

通过mysqli_query()执行SQL语句

增、删、改语句执行成功返回true,失败返回false


相关语法:

mysqli_query():执行SQL语句
mysqli_insert_id():获取插入记录自动增长的ID
mysqli_affected_rows():获取受影响的记录数
mysqli_error():获取执行SQL语句的错误信息
mysqli_errno():获取执行SQL语句的错误码

案例:

<?php
//1、连接数据库
$link=mysqli_connect('localhost','root','root','data');
//2、设置支付编码
mysqli_set_charset($link,'utf8');
//3、执行SQL语句

//3.1  执行insert语句
/*
$rs=mysqli_query($link,"insert into news values (null,'静夜思','床前明月光',unix_timestamp())");
if($rs)
    echo '自动增长的编号是:'.mysqli_insert_id($link);
*/

//3.2  执行update语句
/*
$rs=mysqli_query($link,"update news set content='疑是地上霜' where id=4");
if($rs)
    echo '受影响的记录数是:'.mysqli_affected_rows($link);
else{
    echo '错误码:'.mysqli_errno($link),'<br>';
    echo '错误信息:'.mysqli_error($link);   
}
*/

//3.3  执行delete语句
mysqli_query($link,"delete from news where id=5");


三、数据查询语句

数据查询用select、desc、show,成功会返回结果集,失败返回false

相关语法:

mysqli_fetch_assoc():将一条数组匹配关联数组
mysqli_fetch_row():将一条记录匹配成索引数组
mysqli_fetch_array():将一条记录匹配成既有关联数组又有索引数组
mysqli_fetch_all():匹配所有记录
mysqli_num_rows():总行数
mysqli_num_fields():总记录数
mysqli_free_result():销毁结果集
mysqli_close():关闭连接

案例:

<?php
//1、连接数据库  未连接上显示错误信息
$link=@mysqli_connect('localhost','root','root','data') or die('错误信息:'.mysqli_connect_error());
//2、设置字符编码
mysqli_query($link,'set names utf8');
//3、执行查询语句
$rs=mysqli_query($link,'select * from news');
//var_dump($rs);    //object(mysqli_result)
//4、获取对象中的数据
//4.1  将对象中的一条数据匹配成索引数组,指针下移一条
//$rows=mysqli_fetch_row($rs);

//4.2  将对象中的一条数据匹配成关联数组,指针下移一条
//$rows=mysqli_fetch_assoc($rs);

//4.3  将对象中的一条数据匹配成索引,关联数组,指针下移一条
//$rows=mysqli_fetch_array($rs);

//4.4  总列数、总行数
//echo '总行数'.mysqli_num_rows($rs),'<br>';
//echo '总列数'.mysqli_num_fields($rs),'<br>';

//4.5  获取所有数据
//$list=mysqli_fetch_all($rs);      //默认是索引数组
//$list=mysqli_fetch_all($rs,MYSQLI_NUM);       //匹配成索引数组
//$list=mysqli_fetch_all($rs,MYSQLI_ASSOC);     //匹配成关联数组
$list=mysqli_fetch_all($rs,MYSQLI_BOTH);        //匹配成关联、索引数组

echo '<pre>';
print_r($list);

//5、销毁结果集
mysqli_free_result($rs);

//6、关闭连接
mysqli_close($link);


综合案例1:新闻模块

mysqlli连接数据库案例


(1)新闻模块包含文件

由于所有的操作都要连接数据库,将连接数据库的代码存放到包含文件中

步骤

1、在站点下创建inc文件夹

2、在inc下创建conn.php文件,用来连接数据库,代码就是上面连接数据库的代码

<?php
//连接数据库
$link=@mysqli_connect('localhost','root','root','data') or die('错误:'.mysqli_connect_error());
mysqli_set_charset($link,'utf8');

(2)显示新闻

步骤:

1、连接数据库

2、获取数据

3、遍历循环数据

<style type="text/css">
    table{
        width:780px;
        border:solid 1px #000;
        margin:auto;
    }
    th,td{
        border:solid 1px #000;
    }
</style>
<body>
<?php
//1、连接数据库
require './inc/conn.php';
//2、获取数据
$rs=mysqli_query($link,'select * from news order by id desc');  //返回结果集对象
$list=mysqli_fetch_all($rs,MYSQLI_ASSOC);       //将结果匹配成关联数组
?>
<table>
    <tr>
        <th>编号</th> <th>标题</th> <th>内容</th> <th>时间</th> <th>修改</th> <th>删除</th>
        <!--3、循环显示数据-->
        <?php foreach($list as $rows):?>
        <tr>
            <td><?php echo $rows['id']?></td>
            <td><?php echo $rows['title']?></td>
            <td><?php echo $rows['content']?></td>
            <td><?php echo date('Y-m-d H:i:s',$rows['createtime'])?></td>
            <td><input type="button" value="修改" onclick=""></td>
            <td><input type="button" value="删除" onclick=""></td>
        </tr>
        <?php endforeach;?>
    </tr>
</table>
</body>

运行结果为:

mysqlli连接数据库后显示新闻结果

(3)添加新闻

1、创建表单

2、连接数据库

3、将新闻数据写入到数据库中

入口(list.php)

<a href="./add.php">添加新闻</a>

代码实现

<body>
<?php
if(!empty($_POST)) {
    //2、连接数据库
    require './inc/conn.php';
    //3、插入数据
    $time=time();   //获取时间戳
    $sql="insert into news values (null,'{$_POST['title']}','{$_POST['content']}',$time)";  //拼接SQL语句
    
    if(mysqli_query($link,$sql))    //执行SQL语句
        header('location:./list.php');  //插入成功就跳转到list.php页面
    else{
        echo 'SQL语句插入失败<br>';
        echo '错误码:'.mysqli_errno($link),'<br>';
        echo '错误信息:'.mysqli_error($link);
    }
}
?>
<!--1、创建表单-->
<form method="post" action="">
    标题: <input type="text" name="title"> <br /> <br />
    内容:  <textarea name="content" rows="5" cols="30"></textarea> <br /> <br />
    <input type="submit" name="button" value="提交">
</form>
</body>

运行结果

mysqlli连接数据库后添加新闻结果

(4)删除新闻

步骤:

1、在list.php页面点击删除按钮,跳转到del.php页面,传递删除的id

2、在del.php页面连接数据库

3、通过id删除数据

4、删除成功后,跳转到list.php


入口(list.php)

<input type="button" value="删除" onclick="if(confirm('确定要删除吗'))location.href='./del.php?id=<?php echo $rows['id']?>'">

代码实现del.php

<?php
//1、连接数据库
require './inc/conn.php';
//2、拼接SQL语句
$sql="delete from news where id={$_GET['id']}";
//3、执行SQL语句
if(mysqli_query($link,$sql))
    header('location:./list.php');
else{
    echo '删除失败';
}

小结:

1、一个页面是否写HTML架构,取决于是否有显示功能。

2、如果一个页面只是做业务逻辑,没有显示功能,就不需要写HTML架构,比如del.php页面


mysqlli连接数据库截图


(5)修改新闻

入口(list.php)

<input type="button" value="修改" onclick="location.href='edit.php?id=<?php echo $rows['id']?>'">


步骤

edit.php页面

第一步:显示修改界面


1、连接数据库

2、获取修改的数据

3、将数据显示到表单中


第二步:执行修改逻辑


1、获取新数据

2、拼接修改的SQL语句,执行修改逻辑


代码如下

<?php
//连接数据库
require './inc/conn.php';
//1、获取修改的数据库
$sql="select * from news where id={$_GET['id']}"; //拼接SQL语句
$rs=mysqli_query($link,$sql);   //获取修改的数据
$rows=mysqli_fetch_assoc($rs);  //将修改的数据匹配成一维关联数组
//2、执行修改的逻辑
if(!empty($_POST)) {
    $id=$_GET['id'];        //获取修改的id
    $title=$_POST['title']; //修改的标题
    $content=$_POST['content']; //修改的内容
    $sql="update news set title='$title',content='$content' where id=$id"; //拼接SQL语句
    if(mysqli_query($link,$sql))
        header('location:list.php');   //修改成功跳转到list.php页面
    else
        echo '错误:'.mysqli_error($link);
    exit;
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>

<body>
<form method="post" action="">
    标题: <input type="text" name="title" value='<?php echo $rows['title']?>'> <br /> <br />
    内容:  <textarea name="content" rows="5" cols="30"><?php echo $rows['content']?></textarea> <br /> <br />
    <input type="submit" name="button" value="提交">
    <input type="button" value="返回" onclick="location.href='list.php'">
</form>
</body>
</html>


运行结果

连接数据库结果


综合案例2:通过异步实现增、删、改

(1)异步添加

<body>
<script src='./js/jquery-3.3.1.min.js'></script>
<script>
$(document).ready(function() {
    $(':button:first').click(function(){
        var title=$('#title').val();
        var content=$('#content').val();
        $.post('./add.php',{'title':title,'content':content},function(data){
            if(data){
                alert('添加成功');
                location.href='list.php';
            }else{
                alert('添加失败');
            }
        })
    })
});
</script>
<!--1、创建表单-->
<form method="post" action="">
    标题: <input type="text" id="title"> <br /> <br />
    内容:  <textarea id="content" rows="5" cols="30"></textarea> <br /> <br />
    <input type="button" name="button" value="提交">
</form>
</body>

add.php

<?php
require './inc/conn.php';
$title=$_POST['title'];
$content=$_POST['content'];
$time=time();
$sql="insert into news values (null,'$title','$content',$time)";
echo mysqli_query($link,$sql)?1:0;

(2)异步删除

list.php

-- button按钮
<td><input type="button" value="删除" op='del' newsid=<?php echo $rows['id']?>></td>

<script src='./js/jquery-3.3.1.min.js'></script>
<script>
$(document).ready(function() {
    $(':button').click(function(){
        var tr=$(this).parents('tr');   //按钮所在的行

        if($(this).attr('op')=='del'){
            var id=$(this).attr('newsid');  //获取新闻的id
            $.post('./del.php',{'id':id},function(data){
                
                if(data==1)
                    tr.remove();
                else
                    alert('删除失败');
            })
        }
    })
});
</script>

del.php

<?php
//1、连接数据库
require './inc/conn.php';
//2、拼接SQL语句
$sql="delete from news where id={$_POST['id']}";
//3、执行SQL语句
echo mysqli_query($link,$sql)?1:0;


小米技术社区