php速成_day3
一、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的更多相关文章
- 《LoadRunner12七天速成宝典》来了
看到自己的新书又要发行了,算算从09年第一本书开始,不知不觉已经是第四本书了(帮朋友合写的书不算),每次写完之后都会说太累了,不想再写了,但是却又次次反悔,吞下食言的苦果.如果非要说第四本书的感受,那 ...
- Java正则速成秘籍(一)之招式篇
导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...
- Java正则速成秘籍(二)之心法篇
导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...
- Java正则速成秘籍(三)之见招拆招篇
导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...
- 【小白的CFD之旅】08 CFD速成之道
学了那么一个星期的流体力学,又看了一周的计算流体力学,小白对于如何应用CFD解决工程流体问题,依然是一无所知.眼看一个月的时间已经过半,小白有点着急起来.于是在一个阳光明媚的早晨,小白又找到了黄师姐. ...
- 一个简单的html5页面在线速成工具!(当然本文主要说下他的成果的结构)
分享一个好玩的web app页面速成工具 当然主要是让大家看下他的原理 看着他的结构大家就该猜到这个了.这个是利用换页之后给当前div加了一个active,然后利用css控制效果 这个毫无疑问是采用最 ...
- 高手速成android开源项目【导航篇】
Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的一个 ...
- 【翻译】CEDEC2015 速成Albedo Chart 制作
关于pbr材质和贴图的制作,最近llegorithmic提供了几篇不错的guide https://www.allegorithmic.com/pbr-guide 不过像如何从通过现实场 ...
- 30天,O2O速成攻略【8.30南京站】
活动概况 时间:2015年8月30日13:30-16:30 地点:啡咖啡·孵化器(南京市玄武大道699-22号江苏软件园22栋) 主办:APICloud.Udesk.人为峰 网址:www.apiclo ...
随机推荐
- word中替换内容
参考了一篇文章 然后做了如下修改 用python的win32com模块替换word中的文字搞定批量打印奖状 python 操作 office python操作word # -*- coding: u ...
- redis以服务模式开机启动
第一步 修改redis为后台启动 vim /usr/redis/redis.conf #路径根据实际情况决定 # By default Redis does not run as a daemon. ...
- > 1> 2> &> /dev/null Linux重定向输出
编译模拟器的 LINK 阶段产生了大量错误信息,定位不到第一行,所以将错误重定向到了一个文件: scons build/X86_VI_hammer_GPU/gem5.opt --default=X86 ...
- 【剑指Offer】面试题07. 重建二叉树
题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 ...
- python_re正则表达
re模块就本质而言,正则表达式(或RE)是一种小型的.高度专业化的编程语言,(在python中)它内嵌在Python中,并通过re模块实现,正则表达式模块被编译成一系列的字节码,然后由用C编写的匹配引 ...
- 【Vue中的坑】Vue打包上传线上报Uncaught SyntaxError: Unexpected token <
今天在vue打包上传线上后,报一下错误,一下就懵了,这可咋整啊,一如既往的想都没想就开始复制错误,上网开搜 Uncaught SyntaxError: Unexpected token < Un ...
- 从华硕裁员、分拆业务看传统PC企业转型到底有多难?
近段时间,华硕的处境可谓"冰火两重天".一方面,华硕正式发布ROG游戏手机.这款手机以超强性能和华丽外观,让游戏玩家群体为之沸腾.即使最高售价高达12999元,还是有不少玩家趋之若 ...
- (BUILDER)建造者与(FACTORY)工厂模式 的比较
首先,说明下 参考博文 1. 建造者 http://www.cnblogs.com/zhili/p/BuilderPattern.html 2. 抽象工厂 http://www ...
- Nginx系列p4:进程结构
Nginx 有两种进程结构:单进程结构,多进程结构.本篇文章我们主要说多进程结构. 问:那为什么 Nginx 采用多进程结构,而不是多线程结构呢? 答:这是因为 Nginx 最核心的目的就是要保证高可 ...
- Codeforces Round #604 (Div. 2) 部分题解
链接:http://codeforces.com/contest/1265 A. Beautiful String A string is called beautiful if no two con ...