一、MySQL关系型数据库

1、什么是数据库

数据库 数据存储的仓库,在网站开发应用当中,需要有一些数据存储起来。

注册的用户信息,使用PHP变量只是一个临时的存储,如果需要永久的存储起来,就把数据存储到数据库中。、

2、常见的数据库

SQL server 微软公司的 sqlserver2005

oracle 甲骨文公司的 大型商业数据库

mysql 一个开源的数据库

3、关系型数据库

关系型数据库,把数据通过二维的关系进行关联起来。

4、MySQL管理软件MySQL-Front

可以使用MySQL相关的数据库管理工具进行操作

  • 打开phpstudy管理软件
  • 点击MySQL管理器,点击MySQL-Front
  • 删除当前的显示出来的,新建一个数据库
  • 确定MySQL已经启动
  • 双击自己刚刚新建的数据库,建立连接

5、创建数据库

数据库使用中,需要先创建一个数据库,再到数据库中创建表进行使用。数据是存储到数据表中的。

一台数据库服务器上,可能运行了多个项目。多个项目就会拥有多个数据库。

商城项目 shop数据库

学生管理系统 student数据库

通过数据库管理软件(图形界面)进行操作

通过SQL语句进行数据库的管理操作:

  • 创建数据库

    1. create database 数据库名称;
  • 查看数据库

    1. show databasses;
  • 修改,重命名

    在Mysql5之后是不允许对数据库进行修改的,只能是删除再进行创建

  • 删除

    1. drop database 数据库名称;

6、数据字段的类型详解

  • 整型

    1. - 不同int类型,取值范围是不同的,所占用的空间大小也不同
    2. - 无符号 正数范围 实际开发中存储正数 unsigned
    3. - tinyint 人的年龄
    4. - smallint 万级别 人员编号 学生编号
    5. - medium 千万级别 文章id 商品id
    6. - int 亿级别
    7. - bigintint范围更大的
    8. - 合理使用整型存储数据范围,可以节省数据存储空间。提高数据的使用和查询速度。
  • 字符串类型

    1. char 定长的 最大255字符
    2. 电话号码char11 QQ号码 密码md5返回32 char(32)
    3. varchar 变长的 最大65535字节 utf8 一个字符占用3个字节 2万左右 gbk 一个字符占用2个字节 3万左右 会占用一个字节进行存储数据的长度
    4. 会员的名称 备注描述
    5. text 文本类型 存储数据更大的字符串类型
    6. enum 枚举类型(单选)
    7. 基本语法:enum(‘男’,’女’,’保密’);
    8. set 集合类型(多选)
    9. 基本语法:set(‘吃饭’,’睡觉’,’打豆豆’)
  • 一些关键字

    1. unsigned 无符号 指使用整型的正数范围
    2. not null 非空
    3. primary key 主键 设置为数据表中的id 唯一的
    4. auto_increment 自动增长 当整型数据没有被插入时,会根据上条进行+1操作

7、创建数据表

数据表以二维表的方式进行存储数据。行和列。

  • 创建数据表

    1. create table 数据表名称 (
    2. 字段1 字段类型,
    3. 字段2 字段类型
    4. )[表选项];

    案例:创建一个存储用户信息的数据表

    username age address

    注意在创建数据表时,要选择操作的数据库。

    1. use 数据库名称;
  • 查看

    查看当前操作数据库里的所有数据表

    1. show tables;
  • 修改名称

    数据库名称不可以进行修改,但是数据表名称可以通过rename语法进行修改

    1. rename table 旧名称 to 新名称
  • 删除

    1. drop table 表名字;

8、数据的增删改查(重点中的重点)

  • 增加

    1. insert into 表名字 values (字段的值)
  • 查询

    1. select 查询的字段名字 from 表名字
    • where 查询条件

      查询处id为2的数据

      1. select * from user where id =2;
    • order by 通过某个条件字段进行排序显示 asc 升序(123)desc倒序(321)

      1. select * from user order by age desc;
    • limit 限制输出的条数 第一个参数skip跳过几天,第二个参数取几条

      1. select * from user order by age desc limit 1;
  • 修改

    1. update 表名称 set 字段名称 = 修改为新的值 where 查询条件
  • 删除

    1. delete from 表名称 where 查询条件

    删除整个表可以delete语句不加where条件。

    问:delete和truncate删除表数据的区别?

    delete删除整个表,它的id会延续之前的自增属性的id值

    truncate清空整个表,id也重置

    1. truncate 表名称;
  1. -- 创建数据库
  2. create database php;
  3. -- 查看数据库
  4. show databases;
  5. -- 删除shop数据库
  6. drop database shop;
  7. -- 使用数据库
  8. use php;
  9. -- 创建user数据表
  10. -- not null 字段值不能够为null
  11. -- auto_increment 自增
  12. -- primary key 主键 唯一性
  13. create table user(
  14. id smallint not null auto_increment,
  15. username varchar(20) not null,
  16. age tinyint,
  17. address varchar(255),
  18. primary key(id)
  19. )engine=myisam default charset=utf8;
  20. -- 创建商品表
  21. -- decimal 用来存储小数类型
  22. create table goods(
  23. id mediumint not null auto_increment,
  24. goodsname varchar(40) not null,
  25. price decimal(10,2) not null,
  26. author varchar(20) not null,
  27. primary key(id)
  28. )engine=myisam default charset=utf8;
  29. -- 修改表名称
  30. rename table goods to php_goods;
  31. -- 删除表
  32. drop table user;
  33. -- user表写入数据
  34. insert into user values (null,'小明',15,'北京市昌平区');
  35. insert into user values (null,'小红',10,'天津市西青区');
  36. -- 插入固定字段的写法
  37. insert into user(username,age,address) values('小强',9,'大连市西岗区');
  38. -- 查询出user表的信息
  39. -- *代表全部字段查询出来
  40. select * from user;
  41. -- 查询出user表中id2的数据
  42. select * from user where id = 2;
  43. -- order by 语法
  44. select * from user order by age desc;
  45. -- limit 语法
  46. select * from user order by age desc limit 0,1;
  47. -- 修改id1username为王小明
  48. update user set username = '王小明' where id = 1;
  49. -- 删除id2的数据
  50. delete from user where id = 2;
  51. -- 清空表
  52. truncate user;
  53. -- 设计存储图书信息的数据表
  54. create table goods(
  55. id smallint unsigned not null auto_increment,
  56. goodsname varchar(20) not null,
  57. price decimal(10,2) not null,
  58. img varchar(50) not null,
  59. author varchar(200) not null,
  60. primary key(id)
  61. )engine=myisam default charset=utf8;

二、PHP和MySQL拓展

1、PHP和MySQL的关系

PHP的变量只能够临时接收用户信息,如果需要永久存储,就存储到MySQL中。

就需要通过PHP来操作MySQL进行的管理操作。

2、开启MySQL拓展(使用PHP操作MySQL)

PHP想要操作MySQL数据库,需要有对应的函数库支持。开启php_mysql.dll

开启拓展,php.ini配置文件

  1. # 打开phpstudy
  2. # 点击其他选项菜单,选择打开配置文件,选择php-ini
  3. # 在打开的文件中

修改了配置文件之后注意重启apache

通过开启后的php对应的mysql操作,就可以操作mysql数据库了。

操作数据库使用的语法或者步骤:

  • 连接数据库

    1. mysql_connect(‘主机名或者ip地址’,’用户名称’,’用户密码’);
  • 设置选择数据库

    1. mysql_query(use 数据库名称);
  • 设置字符串编码

    1. mysql_query(set names utf8);

    PHP操作mysql的重点就是通过之前学习的SQL语句,使用PHP的函数mysql_query执行,对应处理返回结果。

    mysql_affected_rows() 执行sql之后返回的影响行数

3、增加操作

day3/insert.php

  1. <?php
  2. // header响应头信息
  3. header('Content-Type:text/html;charset=UTF-8');
  4. // 引入数据库连接
  5. require './mysql.php';
  6. //4.sql语句
  7. $sql = "insert into user values (null,'xiaohei',23,'北京市房山区')";
  8. // 5.执行sql语句
  9. $result = mysql_query($sql);
  10. // 执行后的返回值 成功为true 失败为false
  11. // 执行后影响的行数
  12. if($result && mysql_affected_rows() > 0){
  13. echo '写入成功';
  14. }else{
  15. echo '写入失败';
  16. }

4、更新操作

day3/update.php

  1. <?php
  2. // header响应头信息
  3. header('Content-Type:text/html;charset=UTF-8');
  4. // 引入数据库连接
  5. require './mysql.php';
  6. //4.sql语句
  7. $sql = "update user set username = '小黑' where id = 3";
  8. // 5.执行sql语句
  9. $result = mysql_query($sql);
  10. // 执行后的返回值 成功为true 失败为false
  11. // 执行后影响的行数
  12. if($result && mysql_affected_rows() > 0){
  13. echo '修改成功';
  14. }else{
  15. echo '修改失败';
  16. }

5、删除操作

day3/delete.php

  1. <?php
  2. // header响应头信息
  3. header('Content-Type:text/html;charset=UTF-8');
  4. // 引入数据库连接
  5. require './mysql.php';
  6. //4.sql语句
  7. $sql = "delete from user where username = '小黑'";
  8. // 5.执行sql语句
  9. $result = mysql_query($sql);
  10. // 执行后的返回值 成功为true 失败为false
  11. // 执行后影响的行数
  12. if($result && mysql_affected_rows() > 0){
  13. echo '删除成功';
  14. }else{
  15. echo '删除失败';
  16. }

6、查询操作

查询的SQL语句通过mysql_query执行后,返回的是一个资源集。需要使用mysql_fetch_assoc(资源集)取出数据,每次取出一条数据。

day3/select.php

  1. <?php
  2. // header响应头信息
  3. header('Content-Type:text/html;charset=UTF-8');
  4. // 引入数据库连接
  5. require './mysql.php';
  6. // 4.sql
  7. $sql = 'select * from user';
  8. // 5.执行sql
  9. $result = mysql_query($sql);
  10. // 返回资源集
  11. // var_dump($result);
  12. // 从资源集结果中取出一条数据
  13. // 每次只能去一条
  14. // $rows = mysql_fetch_assoc($result);
  15. // var_dump($rows);
  16. // 再取一条信息
  17. // echo '<hr>';
  18. // var_dump(mysql_fetch_assoc($result));
  19. // echo '<hr>';
  20. // var_dump(mysql_fetch_assoc($result));
  21. // echo '<hr>';
  22. // var_dump(mysql_fetch_assoc($result));
  23. // echo '<hr>';
  24. // var_dump(mysql_fetch_assoc($result));
  25. // while循环
  26. // 条件等于false就不执行了
  27. while ($row = mysql_fetch_assoc($result)) {
  28. echo '姓名:'.$row['username'].'<br>';
  29. echo '年龄:'.$row['age'].'<br>';
  30. echo '地址:'.$row['address'].'<br>';
  31. echo '<hr>';
  32. }

7、遍历输出查询结果

因为结果集每次只能取出一条数据,遍历结果集,并输出里面的内容。

while循环适合进行不知道循环次数,然后进行一个循环取出数据的操作。

day3/select.php

  1. <?php
  2. // header响应头信息
  3. header('Content-Type:text/html;charset=UTF-8');
  4. // 引入数据库连接
  5. require './mysql.php';
  6. // 4.sql
  7. $sql = 'select * from user';
  8. // 5.执行sql
  9. $result = mysql_query($sql);
  10. // 返回资源集
  11. // var_dump($result);
  12. // 从资源集结果中取出一条数据
  13. // 每次只能去一条
  14. // $rows = mysql_fetch_assoc($result);
  15. // var_dump($rows);
  16. // 再取一条信息
  17. // echo '<hr>';
  18. // var_dump(mysql_fetch_assoc($result));
  19. // echo '<hr>';
  20. // var_dump(mysql_fetch_assoc($result));
  21. // echo '<hr>';
  22. // var_dump(mysql_fetch_assoc($result));
  23. // echo '<hr>';
  24. // var_dump(mysql_fetch_assoc($result));
  25. // while循环
  26. // 条件等于false就不执行了
  27. while ($row = mysql_fetch_assoc($result)) {
  28. echo '姓名:'.$row['username'].'<br>';
  29. echo '年龄:'.$row['age'].'<br>';
  30. echo '地址:'.$row['address'].'<br>';
  31. echo '<hr>';
  32. }

三、综合案例:仿JD的产品管理功能

1、图书添加功能页面

day3/jd/add.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>添加图书</title>
  6. </head>
  7. <body>
  8. <form action="do.php?act=add" enctype="multipart/form-data" method="post">
  9. 商品名称<input type="text" name="goodsname" />
  10. <hr>
  11. 价格<input type="text" name="price" />
  12. <hr>
  13. 出版社<input type="text" name="author" />
  14. 图片<input type="file" name="img" />
  15. <hr>
  16. <input type="submit" name="submit" value="添加" />
  17. </form>
  18. </body>
  19. </html>

2、图书添加功能页面

day3/jd/add.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>添加图书</title>
  6. </head>
  7. <body>
  8. <form action="do.php?act=add" enctype="multipart/form-data" method="post">
  9. 商品名称<input type="text" name="goodsname" />
  10. <hr>
  11. 价格<input type="text" name="price" />
  12. <hr>
  13. 出版社<input type="text" name="author" />
  14. 图片<input type="file" name="img" />
  15. <hr>
  16. <input type="submit" name="submit" value="添加" />
  17. </form>
  18. </body>
  19. </html>

3、数据添加处理页面

数据管理的页面除了做添加操作之前,可能之后还要做删除和修改操作。所以需要对要执行的操作进行判断。

在PHP中还有一个 $_REQUEST 的请求接收变量,既可以接收$ _POST 的信息也可以接收$_GET 的信息。

day3/jd/do.php

  1. <?php
  2. // header响应头
  3. header('Content-Type:text/html;charset=UTF-8');
  4. // 引入函数库
  5. require './function.php';
  6. // 引入数据库连接
  7. require './mysql.php';
  8. // 判断是需要进行什么操作
  9. if($_REQUEST['act'] == 'add')
  10. {
  11. // 接收添加的商品图书信息
  12. // 判断是否表单提交
  13. if(isset($_POST['submit'])){
  14. // 接收信息
  15. $goodsname = $_POST['goodsname'];
  16. $price = $_POST['price'];
  17. $author = $_POST['author'];
  18. // 根据之前学习的上传文件操作,进行处理
  19. $filename = filename($_FILES['img']['name']);
  20. move_uploaded_file($_FILES['img']['tmp_name'],'./upload/'.$filename);
  21. // 添加接收的数据到数据库中
  22. $sql = "insert into goods values(null,'$goodsname',$price,'$filename','$author')";
  23. // echo $sql;
  24. // 执行sql语句
  25. $result = mysql_query($sql);
  26. // 判断是否添加成功
  27. if($result && mysql_affected_rows() > 0){
  28. echo '添加成功';
  29. }else{
  30. echo '添加失败';
  31. }
  32. }
  33. }elseif($_REQUEST['act'] == 'update'){
  34. // 修改方法
  35. }

4、设计数据库表存储数据

需要把PHP处理页面接收到的信息,存储到数据库。

通过数据表的字段进行存储。

设计一个存储图书信息的数据表

5、使用PHP操作MySQL存储数据

day3/jd/do.php

  1. <?php
  2. // header响应头
  3. header('Content-Type:text/html;charset=UTF-8');
  4. // 引入函数库
  5. require './function.php';
  6. // 引入数据库连接
  7. require './mysql.php';
  8. // 判断是需要进行什么操作
  9. if($_REQUEST['act'] == 'add')
  10. {
  11. // 接收添加的商品图书信息
  12. // 判断是否表单提交
  13. if(isset($_POST['submit'])){
  14. // 接收信息
  15. $goodsname = $_POST['goodsname'];
  16. $price = $_POST['price'];
  17. $author = $_POST['author'];
  18. // 根据之前学习的上传文件操作,进行处理
  19. $filename = filename($_FILES['img']['name']);
  20. move_uploaded_file($_FILES['img']['tmp_name'],'./upload/'.$filename);
  21. // 添加接收的数据到数据库中
  22. $sql = "insert into goods values(null,'$goodsname',$price,'$filename','$author')";
  23. // echo $sql;
  24. // 执行sql语句
  25. $result = mysql_query($sql);
  26. // 判断是否添加成功
  27. if($result && mysql_affected_rows() > 0){
  28. echo '添加成功';
  29. }else{
  30. echo '添加失败';
  31. }
  32. }
  33. }elseif($_REQUEST['act'] == 'update'){
  34. // 修改方法
  35. }

6、图书列表页面展示(select查询出数据 )

静态模版页面的制作

day3/jd/index.php

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>仿JD图书列表页面</title>
  6. </head>
  7. <style type="text/css">
  8. .price{
  9. color: #e4393c;
  10. font-size: 20px;
  11. margin: 10px;
  12. }
  13. .title,.author{
  14. color: #666;
  15. font-size: 12px;
  16. margin: 10px;
  17. }
  18. .box{
  19. float: left;
  20. border: 1px solid #c5c5c5;
  21. }
  22. </style>
  23. <body>
  24. <div id="content">
  25. <?php
  26. // 连接数据库
  27. require './mysql.php';
  28. // 查询sql语句
  29. $sql = 'select * from goods';
  30. $result = mysql_query($sql);
  31. // 遍历资源集
  32. while ($row = mysql_fetch_assoc($result)) {
  33. ?>
  34. <div class="box">
  35. <div><img src="upload/<?php echo $row['img']?>"></div>
  36. <div class="price"><?php echo $row['price']?></div>
  37. <div class="title"><?php echo $row['goodsname']?></div>
  38. <div class="author"><?php echo $row['author']?></div>
  39. </div>
  40. <?php }?>
  41. </div>
  42. </body>
  43. </html>

循环遍历输出数据库中存储的数据信息

day3/jd/index.php

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>仿JD图书列表页面</title>
  6. </head>
  7. <style type="text/css">
  8. .price{
  9. color: #e4393c;
  10. font-size: 20px;
  11. margin: 10px;
  12. }
  13. .title,.author{
  14. color: #666;
  15. font-size: 12px;
  16. margin: 10px;
  17. }
  18. .box{
  19. float: left;
  20. border: 1px solid #c5c5c5;
  21. }
  22. </style>
  23. <body>
  24. <div id="content">
  25. <?php
  26. // 连接数据库
  27. require './mysql.php';
  28. // 查询sql语句
  29. $sql = 'select * from goods';
  30. $result = mysql_query($sql);
  31. // 遍历资源集
  32. while ($row = mysql_fetch_assoc($result)) {
  33. ?>
  34. <div class="box">
  35. <div><img src="upload/<?php echo $row['img']?>"></div>
  36. <div class="price"><?php echo $row['price']?></div>
  37. <div class="title"><?php echo $row['goodsname']?></div>
  38. <div class="author"><?php echo $row['author']?></div>
  39. </div>
  40. <?php }?>
  41. </div>
  42. </body>
  43. </html>

最终实现效果

php速成_day3的更多相关文章

  1. 《LoadRunner12七天速成宝典》来了

    看到自己的新书又要发行了,算算从09年第一本书开始,不知不觉已经是第四本书了(帮朋友合写的书不算),每次写完之后都会说太累了,不想再写了,但是却又次次反悔,吞下食言的苦果.如果非要说第四本书的感受,那 ...

  2. Java正则速成秘籍(一)之招式篇

    导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...

  3. Java正则速成秘籍(二)之心法篇

    导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...

  4. Java正则速成秘籍(三)之见招拆招篇

    导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...

  5. 【小白的CFD之旅】08 CFD速成之道

    学了那么一个星期的流体力学,又看了一周的计算流体力学,小白对于如何应用CFD解决工程流体问题,依然是一无所知.眼看一个月的时间已经过半,小白有点着急起来.于是在一个阳光明媚的早晨,小白又找到了黄师姐. ...

  6. 一个简单的html5页面在线速成工具!(当然本文主要说下他的成果的结构)

    分享一个好玩的web app页面速成工具 当然主要是让大家看下他的原理 看着他的结构大家就该猜到这个了.这个是利用换页之后给当前div加了一个active,然后利用css控制效果 这个毫无疑问是采用最 ...

  7. 高手速成android开源项目【导航篇】

    Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的一个 ...

  8. 【翻译】CEDEC2015 速成Albedo Chart 制作

        关于pbr材质和贴图的制作,最近llegorithmic提供了几篇不错的guide  https://www.allegorithmic.com/pbr-guide   不过像如何从通过现实场 ...

  9. 30天,O2O速成攻略【8.30南京站】

    活动概况 时间:2015年8月30日13:30-16:30 地点:啡咖啡·孵化器(南京市玄武大道699-22号江苏软件园22栋) 主办:APICloud.Udesk.人为峰 网址:www.apiclo ...

随机推荐

  1. mvn 编译报错mavn sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targ

    mavn 编译报错: mavn sun.security.validator.ValidatorException: PKIX path building failed: sun.security.p ...

  2. nodejs 文件路径问题

    fs.stat()  是 获取 本目录下 文件信息 的方法 .如果使用要加上绝对路径.不然会出问题.例: 解决方法

  3. Python 中使用动态创建类属性的机制实现接口之后的依赖

    我们在自动化测试中经常会需要关联用例处理,需要动态类属性: 推荐使用第二种方法: 创建:setattr() 获取:getattr() 两种,如何创建 类属性 loan_id # 第一种,创建 # 类名 ...

  4. 六十一、SAP中的逻辑运算与进制转换

    一.代码如下 二.16进制计算过程如下 三.计算结果为16进制的11,也就是10进制的17

  5. 003、mysql输出多个结果

    SELECT VERSION(); SELECT NOW(); 结果1: 结果2: 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦 ...

  6. VUE3.x 前瞻

    文档: API Reference 教程 课件 1. 初始化项目 // ① npm i -g @vue/cli // ② vue create my-project // ③ npm install ...

  7. python_@classmethod

    class A(object): bar = 1 def func1(self): print ('foo') @classmethod def func2(cls): print ('func2') ...

  8. Tornado中的Cookie设置

    Tornado中的cookie分为两种--普通cookie和安全cookie 普通cookie 1.创建cookie 原型 self.set_cookie(name, value, domain=No ...

  9. Power Tower

    题目大意:给出一段长为 \(n\) 的序列 \(a_1,a_2,\cdots,a_n\) ,一个模数 \(m\) .每次询问给定 \(l,r\) 求 \(a_l^{{a_{l+1}^\cdots}^{ ...

  10. mybaits的注解方式与配置文件方式比较

    注解方式比配置文件方式简单了更多. 俩种配置 一个是制定配置文件路径,一个直接class指向dao层接口 只需加一个注解@**** 就能够实现 比写一个xml的配置文件简单更多.