• (独孤九剑)---PHP操作MySQL数据库


    【一】开启mysql扩展

    在PHP操作MySQL数据库之前,要保证开启了MySQL数据库扩展

    若未开启,则可以将php.int文件下的php_mysql开启即可,方式为去掉前面的封号;

    配置完成后要重启服务器

    【二】数据库连接步骤

    (1)连接服务器和数据库

    语法:mysqli_connect(主机,登录名,密码,数据库名,数据库服务器端口号);

    案例:登录名和密码为root,连接user数据库

    $connect = mysqli_connect('localhost','root','root','user','3306');
    if(!$connect){
        die("could not connect:".mysqli_error());
    }else{
        echo "连接成功";
    }

    注意:若本步骤已填写了数据库,则跳过第3步

    数据库端口号可不填,默认3306

    (2)判断错误

    语法:mysqli_error(返回的资源);

    类型:boolean(true,false)

    返回连接错误,无错误则返回0,即true

    (3)连接数据库

    语法:mysqli_select_db(服务器,数据库);

    案例:仅连接了服务器,未连接数据库

    $connect = mysqli_connect('localhost','root','root');
    mysqli_select_db($connect,'user');
    if(!$connect){
        die("could not connect:".mysqli_error());
    }else{
        echo "连接成功";
    }

    (4)设置字符集

    语法:mysqli_set_charset(mysqli_connect返回的资源,字符集类型);

    (5)准备SQL语句

    通常需要把变量赋值在SQL语句里使用

    案例:user表里增加数据

    $sql = "insert into user(name,password) values('two',456)";

    (6)发送SQL语句

    语法:mysqli_query(mysqli_connect返回的资源,发送的SQL语句$sql);

    SQL语句准备完成后,需要通过mysqli_query()传送到服务器

    MySQL服务器会执行发送过来的SQL语句

    (7)关闭数据库

    语法:mysqil_close(mysqil_connect返回的资源);

    mysqli_close($connect);

    【三】其他操作

    修改SQL语句即可完成其他操作

    (1)创建数据库

    create database 数据库名;

    (2)创建数据库表

    create table 表名(字段名1 字段类型1...字段名n 字段类型n);

    案例:创建一个表名为user的表,第一个字段为username,字段类型为varchar,长度为32;第二个字段为password,字段类型为varchar,长度为32.

    create table user(username varchar(32),password varchar(32));

    (3)删除数据库表

    drop table 表名;

    (4)插入数据

    insert into 表(字段1,字段2,字段n) values(值1,值2,值n);

    案例:将表单数据,通过post提交到数据库

    demo.html:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>demo测试</title>
    </head>
    <body>
    <form action="./index.php" method="post">
        姓名:<input type="text" name="username"><hr>
        密码:<input type="password" name="pwd"><hr>
        <input type="submit" value="提交按钮">
    </form>
    </body>
    </html>

    index.php:

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
    <?php
        $connect = mysqli_connect('localhost','root','root');
        mysqli_select_db($connect,'user');
        if(!$connect){
            die("could not connect:".mysqli_error());
        }else{
            echo "连接成功<br>";
        }
        $name = $_POST['username'];
        $pwd = $_POST['pwd'];
        mysqli_query($connect,"INSERT INTO user (name, password) 
        VALUES ('$name','$pwd')");
        $close = mysqli_close($connect);
        if(!$close){
            die("关闭数据库失败");
        }else{
            echo "关闭成功";
        }
    ?>

    (5)查询数据

    选择,从表中选取数据展示select* from 表名 where;

    案例:从数据库选取数据展示到HTML表格

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
    <?php
        $connect = mysqli_connect('localhost','root','root');
        mysqli_select_db($connect,'user');
        if(!$connect){
            die("could not connect:".mysqli_error());
        }else{
            echo "连接成功<br>";
        }
        $name = $_POST['username'];
        $pwd = $_POST['pwd'];
        //查询结果
        $result = mysqli_query($connect,"select* from user"); 
    //判断查询结果
       if($result && mysqli_num_rows($result)){//有结果集且结果集不为空
    echo "<table border=1 cellspacing=0>"; while($row = mysqli_fetch_array($result)){ echo "<tr>"; echo "<td>".$row['name']."</td>"; echo "<td>".$row['password']."</td>"; echo "<tr/>"; } echo "</table>";
    }else{
         echo "没有数据";
       }
    $close = mysqli_close($connect); if(!$close){ die("关闭数据库失败"); }else{ echo "关闭成功"; } ?>

    拓展:遍历数据读取

          mysqli_fetch_array(结果变量,[数组类型,可选]);

          mysqli_num返回索引数组;mysqli_assoc返回关联数组;mysqli_both返回索引数组和关联数组;

          $result 变量中存放由 mysql_query() 函数返回的数据。接下来,我们使用 mysql_fetch_array() 函数以数组的形式从记录集返回第一行。每个随后对 mysql_fetch_array() 函数的调用都会返回记录集中的下一行。 while loop 语句会循环记录集中的所有记录。为了输出每行的值,我们使用了 PHP 的 $row 变量 ($row['FirstName'] 和 $row['LastName'])。

    (6)条件查询

    select语句后加入where条件筛选

    案例:查询name为tony的数据

    select* from user where name='tony'

    条件:=,!=,>,<,<=,=>,between(范围值),like(匹配模式)

    (7)结果集排序

    order by 字段名;

    案例:根据名字进行排序

    select* from user order by name

    升序:asc;降序:desc;

    (8)改动 / 更新update

    更新,更新数据update 表名 set 表名 字段名=字段值 where 条件;

    (9)删除delete

    删除,删除数据delete from 表名 where 条件;

    注意:删除和更新尾部需加where条件,否则会影响整个表单

    (拓展)设置主键和自增字段

    每个表都应有一个主键字段。

    主键用于对表中的行进行唯一标识。每个主键值在表中必须是唯一的。此外,主键字段不能为空,这是由于数据库引擎需要一个值来对记录进行定位。

    主键字段永远要被编入索引。这条规则没有例外。你必须对主键字段进行索引,这样数据库引擎才能快速定位给予该键值的行。

    下面的例子把 personID 字段设置为主键字段。主键字段通常是 ID 号,且通常使用auto_increment设置。auto_increment会在新记录被添加时逐一增加该字段的值。要确保主键字

    段不为空,我们必须向该字段添加not null设置。

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
    <?php
        $connect = mysqli_connect('localhost','root','root');
        mysqli_select_db($connect,'user');
        if(!$connect){
            die("could not connect:".mysqli_error());
        }else{
            echo "连接成功<br>";
        }
        //SQL语句    
        $sql = "create table user(
            personID int not null auto_increment, 
            primary key(personID),
            FirstName varchar(15),
            LastName varchar(15),
            Age int
        )";
        mysqli_query($connect,$sql);
        $close = mysqli_close($connect);
        if(!$close){
            die("关闭数据库失败");
        }else{
            echo "关闭成功";
        }
    ?>

    (拓展)

    MySQL数据类型

     int为整型;float浮点型;char和varchar字符串;date时间类型

    日期数据格式:

    date(yyyy-mm-dd)

    datetime(yyyy-mm-dd hh:mm:ss)

    timestamp(yyyymmddhhmmss)

    time(hh:mm:ss)

    【四】注册案例

     注意点:

    (1)去除两端空格

    场景:输入密码时,可能在左右多打空格,因此可以使用trim()消除两端空格

    <?php
        $value = ' to ny ';
        echo strlen(trim($value));//因为使用了trim(),所以会去除两端空格
    ?>

    (2)注册时加上IP和时间

    $username = trim($_POST['username']);
    $password = md5(trim($_POST['password']));//md5加密
    $time = time();//注册时间
    $ip = $_SERVER['REMOTE_ADDR'];//注册的IP

    (3)密码加密

    $password = md5(trim($_POST['password']));//md5加密

    (4)步骤:连接数据库,判断错误,设置字符集

    $connect = mysqli_connect('localhost','root','root','user');
    if(!$connect){
        die("could not connect:".mysqli_error());
    }else{
        echo "连接成功<br>";
    }
    mysql_set_charset('$connect','utf-8');//注意:连接点为字符串形式

    【五】后台列表显示

    可以用上面select语句查询显示,做一个后台用户列表。通过后台来修改用户和密码的相关信息

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
    <?php
        include 'config.php';
        $connect = mysqli_connect(DB_HOST,DB_USER,DB_PWD,DB_NAME);
        mysqli_select_db($connect,'user');
        if(!$connect){
            die("could not connect:".mysqli_error());
        }else{
            echo "连接成功<br>";
        }
        //查询结果
        $result = mysqli_query($connect,"select* from user"); 
        $data = mysqli_fetch_assoc($result);
        //判断查询结果
        if ($result&&mysqli_num_rows($result)) {
            echo "<table border=1 cellspacing=0>";
            while($row = mysqli_fetch_array($result)){
                echo "<tr>";
                echo "<td>".$row['name']."</td>";
                echo "<td>".$row['password']."</td>";
                echo "<td><a href='delete.php?name='".$row['name'].">删除用户</a></td>";
                echo "<td><a href='edit.php?name='".$row['name'].">编辑用户</a></td>";
                echo "<tr/>";
            }
            echo "</table>";
        }else{
            echo "没有数据";
        }
        
        $close = mysqli_close($connect);
        if(!$close){
            die("关闭数据库失败");
        }else{
            echo "关闭成功";
        }
    ?>

    【六】根据id增加编辑和删除命令

    (1)删除的时候分为单选删除和多选删除

    (2)编辑的时候只能选择一个用户

    下面依次介绍

    (1)单选删除

    单选删除可以在delete.php后跟上?,然后加上id和值,点击时即可进行删除

    echo "<td><a href='delete.php?id='".$row['id'].">删除用户</a></td>";

    (2)编辑

    编辑用户也是如此,在edit.php后跟上?,然后加上id和值,点击即可知道编辑哪个用户了

    (3)多选删除

    多选删除需要checkbox,传入多个用户id时需要在name后加id[],使用form表单将表格包起来,在表格外加上一个submit标签即实现了多选删除

    (4)将用户分页

    ①分页的几个基本元素:首页,尾页,当前页,上页,下页

    ②控制页码时,通过URL传入页码值即可实现页码控制。在page.php后加上页码相关信息,即可算出有效信息

    ③原理:通过limit(偏移量offect,数量num)实现真正分页,原理对比图

    页码         URL中get值        偏移量      数量                     

    第1页                1                      0            5

    第2页                2                      5            5

    第3页                3                     10           5

    第n页                n                 (n-1)*5        5    

    ④数字转换

    避免页面存在小数,所以要做强制类型转换:(int)$_GET['page']

    写法一:首次没有传page时,默认第1页

    $page = isset($_GET['page']) ? (int)$_GET['page']:1 ;

    写法二:原理与写法一类似

    if(isset($_GET_['page'])){
        $page = (int) $_GET_['page'];
    }else{
        $page = 1;
    }

    ④最后一页

    每一页都是整数,包括最后一页。如计算出20.3个页面,则要向上取整函数ceil()

    $one = 3;
    $two = 2;
    $result = $one / $two;
    echo ceil($result);//向上取整函数ceil()

    ⑤上下页边缘控制

    最后一页点击下一页,会导致分页时无数据显示。这时便要考虑清楚

    如分页在第1页减1时,让其为第1页;若在最后1页加1时,让其为最后1页

    ⑥计算总页数

    $count_sql = 'select count(name) as c from user';//select count() as c from user;从user表取总数,c为别名
    $result = mysqli_query($connect,$count_sql);
    $data = mysqli_fetch_assoc($result);
    $count = $data['c'];

    【七】删除用户信息

    (1)指定 / 单行删除

    单行是通过GET传参方式向delete.php文件里写上对应ID

    (2)批量删除

    多个删除是通过POST方式向delete.php页面传递对应的ID

    if(is_array($_POST['id'])){
        $id = join(',',$_POST['id']);
    }elseif(is_numeric($_GET['id'])){
        $id = (int)$_GET['id'];
    }

    知识点:

    ①is_array()判断是否为数组;

    ②join()函数是implode()函数的别名,返回由数组元素组合成的字符串

    <?php  
        $arr = array("hello", "world");  
        $str = join("|", $arr);  
        echo $str;  //输出hello|word
    ?>  

    ③is_numeric — 检测变量是否为数字或数字字符

    原理:

    join函数将多选删除传来的id变为3,4,5,的格式,

    最终多选删除的SQL语句执行出来的效果就是delete from user where id in(3,4,5);

    单选删除语句效果就是delete from user where id in(3);

    这样便实现了单选和多选的自适应

    $sql = "delete from user where id in($id)"

    (3)都不符和的话,则视为数据不合法

    【八】修改用户信息

     index.php,edit.php,change.php

    具体代码在PHP修改用户信息做了总结

    【九】显示乱码的解决方案

    下篇文章做总结

    注意:

    ①单选删除和编辑时,需要使用get方法传入id,才能知道要操作的用户;

    ②多选删除时,需要传入多个用户。因此可以使用form表单,使用post方法提交用户id

    ③每个需要数据库的页面都需要连接一次数据库,可以用include来操作

    【总结】

    (1)SQL对大小写不敏感,所以增删改查的增语法INSERT INTO 与 insert into 相同

    (2)数据库版本信息:mysqli_get_server_info(连接点);

    (3)?相当于get传参

    (4)可以写一个配置文件config.php,将配置设为常量。然后在需要的页面用include调用

    <?php
        //数据库服务器
        define('DB_HOST', 'localhost');
        //数据库用户名
        define('DB_USER', 'root');
        //数据库密码
        define('DB_PWD', 'root');
        //数据库名
        define('DB_NAME', 'user');
        //字符集
        define('DB_CHARSET', 'utf8');
    ?>

    调用:

    include 'config.php';
        $connect = mysqli_connect(DB_HOST,DB_USER,DB_PWD,DB_NAME);
        mysqli_select_db($connect,'user');
        if(!$connect){
            die("could not connect:".mysqli_error());
        }else{
            echo "连接成功<br>";
        }
    $close = mysqli_close($connect);
        if(!$close){
            die("关闭数据库失败");
        }else{
            echo "关闭成功";
        }
  • 相关阅读:
    未能从程序集 C:Program Files (x86)MSBuild14.0inMicrosoft.Data.Entity.Build.Tasks.dll 加载任务“EntityClean”
    asp.net mvc 4 项目升级到 asp.net mvc5
    SQL Server查看所有表大小,所占空间
    0x80072f8a未指定的错误
    vs2012 aps.net4.0/4.5尚未在web服务器上注册
    vsphere 出现“在主机的当前连接状况下不允许执行该操作”
    sql server 发布时提示'dbo.sysmergepublications'无效的解决办法
    sql server更改机器名后更改数据库机器名
    Ajax向后台传入File类型参数
    上传下载Azure Blob里的Excel文件。
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8615810.html
Copyright © 2020-2023  润新知