mysql基础语句与用户注册

mysql基础语句与用户注册

作业标题:mysql基础 与 pdo作业
作业内容:1. 总结mysql 常用DDL, DML语言并实操; 2. 新建一张用户表; 3. 预习pdo预处理;


  1. 总结mysql 常用DDL, DML语言并实操;
    DDL语句
    数据库的创建、删除、显示、引入
    创建数据库:

CREATE DATABASE [IF NOT EXISTS] 数据库名;
删除数据库:

DROP DATABASE [IF EXISTS] 数据库名;
显示所有已建立的数据库名称列表:

SHOW DATABASES;
引入数据库为当前数据库:

USE 数据库名;
创建表
语法格式如下:

CREATE TABLE [IF NOT EXISTS] 表名称
(
字段名1 列类型 [属性] [索引],

字段名n 列类型 [属性] [索引]
)[表类型] [表字符集];
eg:

create table if not exists users(
id int(10) unsigned not null auto_increment,
username varchar(50) not null,
userpass varchar(50) not null,
telno varchar(20) not null unique,
sex enum(‘男’,’女’) not null default ‘男’,
brithday date not null default ‘0000-00-00’,
primary key(id),
index users_username(username,userpass)
)
ENGINE=MyISAM default character set utf8 collate utf8_general_ci;
上述中设置表类型为MyISAM使用ENGINE而不是Type。最后一句的意思是:指定默认创建的表字符集(character set)为utf8,校对规则是utf8_general_ci。
表创建成功后,可以使用“show tables”命令查看,使用“describe 表名”或者“desc 表名”命令用于显示表的创建结构。

删除表
drop table [if exists] 表名;
修改表
1、为指定的数据表新增一个字段:
alter table 表名 add 字段名 <建表语句> [firstafter 列名]
语法解析:
[firstafter 列名]:在指定的列名之前或之后添加
eg:在users表的第一列之前添加name列
alter table users add name varchar(30) not null first;
在users表的userpass之后添加height列
alter table users add height double not null default ‘0.00’ after userpass;

2、修改字段的类型或名称:
可以使用change或者modify子句,如果列名相同,则change和modify的作用相同
alter table 表名 change/modify 列表<建表语句>
eg:
修改users表中telno字段,将类型改为int,并设置默认值
alter table users modify telno int unsigned default ‘0’;
如果要修改列名,使用change,change除了更改类型外还能更改列名,而modify不能实现修改列名这个功能。
eg:
修改users表的telno的类型,并将telno命名为phone
alter table users change telno phone int unsigned default ‘0’;
注意:使用change,即使不更改列名,也需要在定义中包括相应的列名,即上述的“telno phone”需要写作“telno telno”。

3、重命名数据表
alter table 旧表名 rename 新表名;

4、删除表字段
alter table 表名 drop 列名;

DML语句
插入记录
1、插入单条记录:
insert into tablename(column1,column2…columnN) values(v1,v2…vN);

2、一次性插入多条记录:

insert into tablename(column1,column2,……columnN)
values
(r1_v1,r1_v2,……r1_vN),
(r2_v1,r2_v2,……r2_vN);
查询数据
1、使用LIMIT关键字,查询指定部分的数据,语法:
select ….from tablename [where..] [order by ..] limit startindex,rowcount
startindex表示起始偏移量,默认为0;rowcount表示查询的行数。

2、聚合查询
语法:

select [col1,col2,…coln] fun_name
from tablename
[where 条件语句]
[group by col1,col2,..coln
[with rollup]]
[having 分组后的条件语句]


  1. 新建一张用户表;
    登录页面2-reg.php
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>注册</title>
  8. </head>
  9. <body>
  10. <h2>用户注册</h2>
  11. <table>
  12. <tr>
  13. <td>账户</td>
  14. <td><input type="text" name="username"></td>
  15. <td><span id="err_msg"></span></td>
  16. </tr>
  17. <tr>
  18. <td>密码</td>
  19. <td><input type="password" name="password"></td>
  20. </tr>
  21. <tr>
  22. <td>性别</td>
  23. <td>
  24. <input type="radio" name="gender" value="1" checked >
  25. <input type="radio" name="gender" value="0" >
  26. </td>
  27. </tr>
  28. <tr align="center">
  29. <td colspan="2">
  30. <input type="button" name="btn" value="确定">
  31. </td>
  32. </tr>
  33. </table>
  34. <script type="text/javascript" src="
  35. https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  36. <script type="text/javascript" >
  37. // 检测用户名是否重复
  38. $('input[name="username"]').blur(function(){
  39. //const data = new FormData();
  40. var data = {};
  41. data.username = $('input[name="username"]').val();
  42. data.type = 1;
  43. $.post('3-doSubmit.php',data,function(res){
  44. if(res.status == 0)
  45. {
  46. $("#err_msg").text(res.msg);
  47. $("#err_msg").css('color','red');
  48. $('input[name="password"]').attr('disabled',true);
  49. }else{
  50. $("#err_msg").text(res.msg);
  51. $("#err_msg").css('color','green');
  52. $('input[name="password"]').removeAttr('disabled',true);
  53. }
  54. },'json')
  55. })
  56. // 检查用户名和密码不能为空
  57. $('input[name="btn"]').click(function(){
  58. var data = {};
  59. data.username = $('input[name="username"]').val();
  60. data.password = $('input[name="password"]').val();
  61. data.gender = $('input[name="gender"]').val();
  62. data.type = 2;
  63. if(data.username == '' || data.password == '' )
  64. {
  65. alert('用户名或密码不能为空');
  66. return;
  67. }
  68. $.post('3-doSubmit.php',data,function(res){
  69. if(res.status == 1)
  70. {
  71. alert(res.msg);
  72. }else{
  73. alert(res.msg);
  74. }
  75. },'json')
  76. })
  77. </script>
  78. </body>
  79. </html>

数据库连接1-connect.php

  1. <?php
  2. namespace connect_chloe;
  3. use PDO;
  4. $config = require __DIR__.'\\config\\database.php';
  5. extract($config);
  6. //var_dump($type);
  7. $dsn = sprintf('%s:host=%s;port=%d;dbname=%s',$type,$host,$port,$dbname);
  8. try {
  9. $pdo = new PDO($dsn,$username,$password,[PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING]);
  10. // var_dump($pdo);
  11. $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
  12. } catch (\Exception $e) {
  13. die('Connection error : ' . $e->getMessage());
  14. }

接收数据分发处理3-doSubmit.php

  1. <?php
  2. namespace pdo_chloe;
  3. //连接数据库
  4. require '1-connect.php';
  5. require 'common.php';
  6. //接收数据
  7. $username=!empty($_POST["username"]) && isset($_POST["username"])?$_POST["username"]:null;
  8. $password=!empty($_POST["password"]) &&isset($_POST["password"])?$_POST["password"]:null;
  9. $gender=!empty($_POST["gender"]) &&isset($_POST["gender"])?intval($_POST["gender"]):null;
  10. $create_time=time();
  11. //请求分发器type 1检查用户名重名 2注册 3登录
  12. $type=isset($_POST['type'])&&!empty($_POST['type'])?intval($_POST['type']):null;
  13. switch($type){
  14. case 1:
  15. $res=checkUname($username);
  16. if($res)
  17. {
  18. echo json_encode(['status'=>0,'msg'=>'用户名已被占用'],320);
  19. }else{
  20. echo json_encode(['status'=>1,'msg'=>'用户名合法'],320);
  21. }
  22. break;
  23. case 2:
  24. if( empty($username) || empty($password) || empty($gender))
  25. {
  26. echo json_encode(['status'=>10,'msg'=>'系统字段错误']);
  27. }else{
  28. $flag = checkUname($username);
  29. if(!$flag)
  30. {
  31. insertData($username,$password,$gender,$create_time);
  32. // 数据插入成功
  33. if($res)
  34. {
  35. echo json_encode(['status'=>1,'msg'=>'注册成功'],320);
  36. }else{
  37. echo json_encode(['status'=>0,'msg'=>'注册失败'],320);
  38. }
  39. }else{
  40. echo json_encode(['status'=>0,'msg'=>'请勿重复提交'],320);
  41. }
  42. }
  43. break;
  44. default:
  45. break;
  46. }

公共函数common.php

  1. <?php
  2. //公共模型文件
  3. require '1-connect.php';
  4. function checkUname($username)
  5. {
  6. global $pdo;
  7. $isOccupied=false;//默认数据库不存在同名用户名
  8. $sql="SELECT `uname` FROM `user` WHERE `uname`='{$username}'";
  9. $res=$pdo->query($sql)->fetch();
  10. //已存在同名昵称
  11. if($res)
  12. {
  13. $isOccupied=true;
  14. }
  15. return $isOccupied;
  16. }
  17. function insertData($username,$password,$gender,$create_time)
  18. {
  19. global $pdo,$res;
  20. $sql="INSERT INTO `user` SET `uname`='{$username}',`pwd`='{$password}',
  21. `gender`={$gender},`create_time`={$create_time};";
  22. //执行 insert sql语句
  23. $res=$pdo->exec($sql);
  24. }

示例图
注册