一.数据库
- 前缀:文件名可以加下划线: 公司名-项目名-表名
- 主键:一个表里的数据,每条数据都有的唯一的值
- 在表里,如果是已经存在的id,或者新增的数据,被删除了,也不会重新计算
- mysql 也可以像PHP那样写流程判断
- mysql 关键字可以是大写也可以是小写,一般我们程序员默认的命令是大写,其他字段小写
- 表名和字段名,用 `` 符号包裹
- 值是用 ‘’ 单引号包裹
1.插入数据
- 关键字: INSERT TNTO
- 例
//第一种插入语句
INSERT INTO `user`VALUES(NULL,'小红',18345647559,'2021-10-19 16:08:53',0)
//第二种插入语句
INSERT INTO `user`('id')VALUES(NULL)
//第三种插入语句
INSERT INTO `user`SET `name` = '小明' ,
2.查询数据
- 关键字 SELECT
- 查询是不改变数据库的数据的,插入,修改,删除,都要修改数据库中的数据
- 例
// 直接查询表里的全部数据
SELECT * FROM `user`
2.1 运算符
- 等于 = ,不等于 <> ,大于等于 >= ,小于等于 <=
- 例
// 查询id 大于10 的
SELECT * FROM `user` WHERE `id` > 10
2.2 逻辑运算符
- AND , OR , XOR
- 例
// 查询小于6的 和 大于18的
SELECT * FROM `user` WHERE `id` < 6 OR `id` >10
2.3 逻辑非
- NOT
- 例
// 查询name 为空的数据
SELECT * FROM `user` WHERE `name` IS NULL
// 查询name 不为空的数据
SELECT * FROM `user` WHERE `name` IS NOT NULL
2.4 BETWEEN
- BETWEEN 相当于取中间值
- 例
// 获取 >=10 AND <=20 的值
SELECT * FROM `user` WHERE `id` BETWEEN 10 AND 20
// 获取除去 >=10 AND <=20 的值
SELECT * FROM `user` WHERE `id` NOT BETWEEN 10 AND 20
2.5 模糊查询
- LIKE 模糊查询的关键字
- _ 下划线代表你查询时输入多少个下划线,就查询你输入关键字加多少个下划线的字符
- % 查询带有你输入关键字的所有数据
- 例
// 查询 xiao 后面还有五个字符的数据
SELECT * FROM `user` WHERE `account` LIKE 'xiao_____'
// 查询所有带有a的数据
SELECT * FROM `user` WHERE `account` LIKE '%a%'
2.6 返回值
*号 会把所有返回值都返回
例:
SELECT`name`,`phone`,`age`FROM `user`WHERE`account`LIKE'%o%'
2.7 分页
- LIMIT 关键字
- 例
// 分页,当前页只看到查询内容的10条
SELECT `name`,`phone`,`age` FROM `user` WHERE `account` LIKE '%o%' LIMIT 10
2.8 排序
- ORDER BY 排序命令,默认是正序,从小到大
- DESC 倒序,从大到小
- 例
// 从小到大
SELECT `id`,`name`,`phone`,`age` FROM `user` WHERE `account` LIKE '%o%' ORDER BY `id` LIMIT 0,10
// 从大到小
SELECT `id`,`name`,`phone`,`age` FROM `user` WHERE `account` LIKE '%o%' ORDER BY DESC `id` LIMIT 0,10
3.修改
- UPDATE 修改命令
- 修改时一定要增加命令,不然会把所有数据都修改了
- WHERE 命令,就是增加条件
WHERE条件,也可以用在,修改和删除里,但是不建议在mysql语句来修改和删除
例
// 把第4条数据修改了
UPDATE `user`SET `name` = '小李',`phone` = '12345678912'WHERE `id` = 4
4. 删除
- DELETE 删除命令
- 也要增加WHERE条件,不然它会把所有数据都删了
- 例
// 把 id =5 的数据删除
DELETE FROM `user` WHERE `id` = 5
二.php获取数据库
- pdo 集合了, php data object ,统一了php访问各种类型数据库
$pdo = new PDO(数据源,用户名,密码);
1. 连接数据库
- dbname=php; php是库名
- 例
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
var_dump($pdo);
2. 预处理sql语句
- prepare 预处理sql语句,生成处理对象
- ->是类的访问符号,访问类里的方法或者成员
-例$pre = $pdo->prepare('SELECT * FROM `user`');
var_dump($pre);
3.执行sql语句
- execute() 执行sql语句(读/写)
- 例
$exe = $pre->execute();
4.返回结果集
- fetchAll() 返回结果集
- 例
$data = $pre->fetchAll();
5.防止连接出错\
- try 执行 {} 里面的代码,如果出错就传给catch
- 例
// 当数据库mysql没有开启是就会报错
try {
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
} catch (PDOException $e) {
// 抛出错误,错误是你可要定义的
echo '数据库连接失败' . $e->getMessage();
}
6. 返回单条结果
- fetch() 查询出来的是一维数组
- 例
$pre = $pdo->prepare('SELECT * FROM `user`');
$exe = $pre->execute();
$data = $pre->fetch();
print_r($data);
- 效果
7.在php增加sql数据
- 例
$pre = $pdo->prepare("INSERT INTO `user` VALUES (null, 'xiaoming', '123456', '小明', 18, '13843818908', 0, 0, 1)");
$exe = $pre->execute();
print_r($exe);
8. PDO 绑定参数
- 防止sql注入:使用pdo,防止sql语句注入,比mysql函数安全很多
- sql注入,就是用户把sql语句,写到表单中,提交到后台,后台如果没有判断,就会直接执行他传过来的sql语句
pdo 只要给个占位符 : ,在下面的代码中,传值给占位符
例
$sql = 'INSERT INTO `user` SET `account`=:account,`password`=:password,`name`=:name,`phone`=:phone';
$pre = $pdo->prepare($sql);
// 在执行之前进行传值
bindParam 参数绑定,第三个参数:
- 占位符名
- 要给值的变量,绑定上,现在可以没有值
- 常量,pdo预定义常量,可以设置这个值的类型, 访问方式: PDO:: ,是类的常量访问方式
PARAM_STR 字符串
PARAM_INT 整数
例
// 增加数据,并获取增加的id值
$pre->bindParam('account', $account, PDO::PARAM_STR);
$pre->bindParam('password', $password, PDO::PARAM_STR);
$pre->bindParam('name', $name, PDO::PARAM_STR);
$pre->bindParam('phone', $phone, PDO::PARAM_INT);
$account = 'xiaozhao';
$password = md5('123456');
$name = '小赵';
$phone = 18715745675;
$exe = $pre->execute();
if(!$ese){
print_r($pre->errorInfo());
}else{
// rowCount 获取是否成功,影响数量
echo $pre->rowCount();
echo '<hr>';
// lastInsertId 获取这次自增的ID 类,是用连接的类,是$pdo
echo $pdo->lastInsertId();
}
9.占位符
- ? 占位符 与 : 明文占位符
? 占位,数组传值,并且不需要绑定数据,直接在 execute 里传数组
例
// ? 占位符
// 添加一条数据
$sql = 'INSERT INTO `user` SET `account`=?,`password`=?,`name`=?,`phone`=?';
$pre = $pdo->prepare($sql);
$exe = $pre->execute([
'xiaoli',
md5(123456),
'小李',
13345753547
]);
if (!$exe) {
print_r($pro->errorInfo());
} else {
echo $pre->rowCount();
echo '<hr>';
echo $pdo->lastInsertId();
}
- 例
// : 明文占位符
$sql = 'INSERT INTO `user` SET `account`=:account,`password`=:password,`name`=:name,`phone`=:phone';
$pre = $pdo->prepare($sql);
$exe = $pre->execute([
':account' => 'xiaolong',
':password' => md5(123456),
':name' => '小龙',
':phone' => 18654215366
]);
if (!$exe) {
print_r($pro->errorInfo());
} else {
echo $pre->rowCount();
echo '<hr>';
echo $pdo->lastInsertId();
}
三.商城项目
用户表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for shop_yh
-- ----------------------------
DROP TABLE IF EXISTS `shop_yh`;
CREATE TABLE `shop_yh` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`account` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`password` char(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`phone` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`gender` char(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
商品表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for shop_sp
-- ----------------------------
DROP TABLE IF EXISTS `shop_sp`;
CREATE TABLE `shop_sp` (
`id` int(10) NOT NULL,
`spmc` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
`spxx` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
`spbh` char(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
`spjg` decimal(10, 0) NULL DEFAULT NULL,
`sccj` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
订单表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for shop_ddb
-- ----------------------------
DROP TABLE IF EXISTS `shop_ddb`;
CREATE TABLE `shop_ddb` (
`id` int(10) NOT NULL,
`ddbh` char(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
`yhid` int(10) NULL DEFAULT NULL,
`spbh` char(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
`spsl` int(10) NULL DEFAULT NULL,
`spjg` decimal(10, 0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Fixed
SET FOREIGN_KEY_CHECKS = 1;