一、MySQL关系型数据库

1、什么是数据库

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

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

2、常见的数据库

SQL server 微软公司的 sqlserver2005

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

mysql 一个开源的数据库

3、关系型数据库

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

4、MySQL管理软件MySQL-Front

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

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

5、创建数据库

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

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

商城项目 shop数据库

学生管理系统 student数据库

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

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

  • 创建数据库

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

    show databasses;
  • 修改,重命名

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

  • 删除

    drop database 数据库名称;

6、数据字段的类型详解

  • 整型

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

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

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

7、创建数据表

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

  • 创建数据表

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

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

    username age address

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

    use 数据库名称;
  • 查看

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

    show tables;
  • 修改名称

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

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

    drop table 表名字;

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

  • 增加

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

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

      查询处id为2的数据

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

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

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

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

    delete from 表名称 where 查询条件

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

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

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

    truncate清空整个表,id也重置

    truncate 表名称;
-- 创建数据库
create database php;
-- 查看数据库
show databases;
-- 删除shop数据库
drop database shop;
-- 使用数据库
use php;
-- 创建user数据表
-- not null 字段值不能够为null
-- auto_increment 自增
-- primary key 主键 唯一性
create table user(
id smallint not null auto_increment,
username varchar(20) not null,
age tinyint,
address varchar(255),
primary key(id)
)engine=myisam default charset=utf8;
-- 创建商品表
-- decimal 用来存储小数类型
create table goods(
id mediumint not null auto_increment,
goodsname varchar(40) not null,
price decimal(10,2) not null,
author varchar(20) not null,
primary key(id)
)engine=myisam default charset=utf8;
-- 修改表名称
rename table goods to php_goods;
-- 删除表
drop table user;
-- 给user表写入数据
insert into user values (null,'小明',15,'北京市昌平区');
insert into user values (null,'小红',10,'天津市西青区');
-- 插入固定字段的写法
insert into user(username,age,address) values('小强',9,'大连市西岗区');
-- 查询出user表的信息
-- *代表全部字段查询出来
select * from user;
-- 查询出user表中id为2的数据
select * from user where id = 2;
-- order by 语法
select * from user order by age desc;
-- limit 语法
select * from user order by age desc limit 0,1;
-- 修改id为1的username为王小明
update user set username = '王小明' where id = 1;
-- 删除id为2的数据
delete from user where id = 2;
-- 清空表
truncate user;
-- 设计存储图书信息的数据表
create table goods(
id smallint unsigned not null auto_increment,
goodsname varchar(20) not null,
price decimal(10,2) not null,
img varchar(50) not null,
author varchar(200) not null,
primary key(id)
)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配置文件

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

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

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

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

  • 连接数据库

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

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

    mysql_query(set names utf8);

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

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

3、增加操作

day3/insert.php

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

4、更新操作

day3/update.php

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

5、删除操作

day3/delete.php

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

6、查询操作

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

day3/select.php

<?php
// header响应头信息
header('Content-Type:text/html;charset=UTF-8');
// 引入数据库连接
require './mysql.php';
// 4.sql
$sql = 'select * from user';
// 5.执行sql
$result = mysql_query($sql);
// 返回资源集
// var_dump($result);
// 从资源集结果中取出一条数据
// 每次只能去一条
// $rows = mysql_fetch_assoc($result);
// var_dump($rows);
// 再取一条信息
// echo '<hr>';
// var_dump(mysql_fetch_assoc($result));
// echo '<hr>';
// var_dump(mysql_fetch_assoc($result));
// echo '<hr>';
// var_dump(mysql_fetch_assoc($result));
// echo '<hr>';
// var_dump(mysql_fetch_assoc($result));
// while循环
// 条件等于false就不执行了
while ($row = mysql_fetch_assoc($result)) {
echo '姓名:'.$row['username'].'<br>';
echo '年龄:'.$row['age'].'<br>';
echo '地址:'.$row['address'].'<br>';
echo '<hr>';
}

7、遍历输出查询结果

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

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

day3/select.php

<?php
// header响应头信息
header('Content-Type:text/html;charset=UTF-8');
// 引入数据库连接
require './mysql.php';
// 4.sql
$sql = 'select * from user';
// 5.执行sql
$result = mysql_query($sql);
// 返回资源集
// var_dump($result);
// 从资源集结果中取出一条数据
// 每次只能去一条
// $rows = mysql_fetch_assoc($result);
// var_dump($rows);
// 再取一条信息
// echo '<hr>';
// var_dump(mysql_fetch_assoc($result));
// echo '<hr>';
// var_dump(mysql_fetch_assoc($result));
// echo '<hr>';
// var_dump(mysql_fetch_assoc($result));
// echo '<hr>';
// var_dump(mysql_fetch_assoc($result));
// while循环
// 条件等于false就不执行了
while ($row = mysql_fetch_assoc($result)) {
echo '姓名:'.$row['username'].'<br>';
echo '年龄:'.$row['age'].'<br>';
echo '地址:'.$row['address'].'<br>';
echo '<hr>';
}

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

1、图书添加功能页面

day3/jd/add.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加图书</title>
</head>
<body>
<form action="do.php?act=add" enctype="multipart/form-data" method="post">
商品名称<input type="text" name="goodsname" />
<hr>
价格<input type="text" name="price" />
<hr>
出版社<input type="text" name="author" />
图片<input type="file" name="img" />
<hr>
<input type="submit" name="submit" value="添加" />
</form>
</body>
</html>

2、图书添加功能页面

day3/jd/add.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加图书</title>
</head>
<body>
<form action="do.php?act=add" enctype="multipart/form-data" method="post">
商品名称<input type="text" name="goodsname" />
<hr>
价格<input type="text" name="price" />
<hr>
出版社<input type="text" name="author" />
图片<input type="file" name="img" />
<hr>
<input type="submit" name="submit" value="添加" />
</form>
</body>
</html>

3、数据添加处理页面

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

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

day3/jd/do.php

<?php
// header响应头
header('Content-Type:text/html;charset=UTF-8');
// 引入函数库
require './function.php';
// 引入数据库连接
require './mysql.php';
// 判断是需要进行什么操作
if($_REQUEST['act'] == 'add')
{
// 接收添加的商品图书信息
// 判断是否表单提交
if(isset($_POST['submit'])){
// 接收信息
$goodsname = $_POST['goodsname'];
$price = $_POST['price'];
$author = $_POST['author'];
// 根据之前学习的上传文件操作,进行处理
$filename = filename($_FILES['img']['name']);
move_uploaded_file($_FILES['img']['tmp_name'],'./upload/'.$filename);
// 添加接收的数据到数据库中
$sql = "insert into goods values(null,'$goodsname',$price,'$filename','$author')";
// echo $sql;
// 执行sql语句
$result = mysql_query($sql);
// 判断是否添加成功
if($result && mysql_affected_rows() > 0){
echo '添加成功';
}else{
echo '添加失败';
}
}
}elseif($_REQUEST['act'] == 'update'){
// 修改方法
}

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

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

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

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

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

day3/jd/do.php

<?php
// header响应头
header('Content-Type:text/html;charset=UTF-8');
// 引入函数库
require './function.php';
// 引入数据库连接
require './mysql.php';
// 判断是需要进行什么操作
if($_REQUEST['act'] == 'add')
{
// 接收添加的商品图书信息
// 判断是否表单提交
if(isset($_POST['submit'])){
// 接收信息
$goodsname = $_POST['goodsname'];
$price = $_POST['price'];
$author = $_POST['author'];
// 根据之前学习的上传文件操作,进行处理
$filename = filename($_FILES['img']['name']);
move_uploaded_file($_FILES['img']['tmp_name'],'./upload/'.$filename);
// 添加接收的数据到数据库中
$sql = "insert into goods values(null,'$goodsname',$price,'$filename','$author')";
// echo $sql;
// 执行sql语句
$result = mysql_query($sql);
// 判断是否添加成功
if($result && mysql_affected_rows() > 0){
echo '添加成功';
}else{
echo '添加失败';
}
}
}elseif($_REQUEST['act'] == 'update'){
// 修改方法
}

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

静态模版页面的制作

day3/jd/index.php

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>仿JD图书列表页面</title>
</head>
<style type="text/css">
.price{
color: #e4393c;
font-size: 20px;
margin: 10px;
}
.title,.author{
color: #666;
font-size: 12px;
margin: 10px;
}
.box{
float: left;
border: 1px solid #c5c5c5;
}
</style>
<body>
<div id="content">
<?php
// 连接数据库
require './mysql.php';
// 查询sql语句
$sql = 'select * from goods';
$result = mysql_query($sql);
// 遍历资源集
while ($row = mysql_fetch_assoc($result)) {
?>
<div class="box">
<div><img src="upload/<?php echo $row['img']?>"></div>
<div class="price">¥<?php echo $row['price']?></div>
<div class="title"><?php echo $row['goodsname']?></div>
<div class="author"><?php echo $row['author']?></div>
</div>
<?php }?>
</div>
</body>
</html>

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

day3/jd/index.php

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>仿JD图书列表页面</title>
</head>
<style type="text/css">
.price{
color: #e4393c;
font-size: 20px;
margin: 10px;
}
.title,.author{
color: #666;
font-size: 12px;
margin: 10px;
}
.box{
float: left;
border: 1px solid #c5c5c5;
}
</style>
<body>
<div id="content">
<?php
// 连接数据库
require './mysql.php';
// 查询sql语句
$sql = 'select * from goods';
$result = mysql_query($sql);
// 遍历资源集
while ($row = mysql_fetch_assoc($result)) {
?>
<div class="box">
<div><img src="upload/<?php echo $row['img']?>"></div>
<div class="price">¥<?php echo $row['price']?></div>
<div class="title"><?php echo $row['goodsname']?></div>
<div class="author"><?php echo $row['author']?></div>
</div>
<?php }?>
</div>
</body>
</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. PyTorch自动微分基本原理

    序言:在训练一个神经网络时,梯度的计算是一个关键的步骤,它为神经网络的优化提供了关键数据.但是在面临复杂神经网络的时候导数的计算就成为一个难题,要求人们解出复杂.高维的方程是不现实的.这就是自动微分出 ...

  2. 八十一、SAP中的ALV的简介(ABAP List Viewer)

    一.ALV是SAP中的一个表格,全称为:ABAP List Viewer或者SAP List Viewer,就是可视化表格. ALV是SAP系统中心的列表标准,可以在ABAP程序中进行报表输出.除去列 ...

  3. 五十三、SAP中创建一个LVC表格

    一.我们打开之前的程序,在函数里面创建一个名字为SHOW_DATA_LVCE的函数 二.点击编辑->模式 三.选择'REUSE_ALV_GRID_DISPLAY_LVC' 四.选择调用功能,点击 ...

  4. opencv python运动人体检测

    采用非极大值抑制,将重叠的框合并成一个. # import the necessary packages from imutils.object_detection import non_max_su ...

  5. hdu 1087 最长上升序列和 dp

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  6. webpack散记--Typescript

    Typescript 1.js的超集 官网:typescriptlang.org/tslang.cn 来自:微软 安装:官方的  npm i typescript ts-loader --save-d ...

  7. HDU - 5976 Detachment(逆元)

    题意:将一个数x拆成a1+a2+a3+……,ai不等于aj,求最大的a1*a2*a3*……. 分析: 1.预处理前缀和前缀积,因为拆成1对乘积没有贡献,所以从2开始拆起. 2.找到一个id,使得2+3 ...

  8. bat 卸载程序的脚本

    @echo off :: BatchGotAdmin :------------------------------------- REM --> Check for permissions & ...

  9. JS ~ Promise 对象

    Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值. Promise.all(iterable) 这个方法返回一个新的promise对象,该promise对象在i ...

  10. 刷题48. Rotate Image

    一.题目说明 题目是48. Rotate Image,简而言之就是矩阵顺时针旋转90度.不允许使用额外的矩阵. 经过观察(写一个矩阵,多看几遍就知道了),旋转90度后: 第1行变为len-1列(最后一 ...