文章目录
一、考点
1、数据表设计
分析数据表结构
留言板有哪些信息需要存储?
- 留言信息:ID,留言标题,留言内容,留言时间,留言人
2、数据表创建语句
// 留言本表 message
create table message(
id int unsigned not null auto_increment primary key,
title varchar(120) not null default '',
content varchar(255) not null default '',
created_at int unsigned not null default '0',
user_name varchar(32) not null default '',
key message_user_name(user_name)
)engine=innodb default charset=utf8;
3、选择PHP连接数据库的方式
1)PDO【推荐使用】
- 可扩展性更好、支持预处理、面向对象
- 推荐使用PDO,因为扩展性非常好,将来换其他库也是没有问题的,而且它里面的方法都是比较完善的。
2)MySQLi
- 只支持MySQL操作(不支持其他库)、支持预处理、面向对象和过程,效率较高(效率比PDO稍微高点)
3)MySQL库
- 只支持MySQL数据库、没有预处理的支持、面向过程
4、编码能力
1)PDO的基本操作
try {
// 操作数据库代码
// ...
} catch(PDOException $e) {
echo $e->getMessage();
}
2)操作数据库代码
// 操作数据库代码
$pdo = new PDO($dsn, $username, $password, $attr);
$sql = 'SELECT `id`, `title`, `content` FROM `message` WHERE `user_name` = :user_name';
$stmt = $pdo->prepare($sql);
$stmt->execute([':user_name'=>$user_name]);
$result = $stmt->fetchALL(PDO::FETCH_ASSOC);
3)代码实现
① 准备一个表单 form.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>留言本</title>
</head>
<body>
<form action="./store.php" method="post">
标题:<input type="text" name="title"><br>
内容:<textarea name="content" cols="30" rows="10"></textarea><br>
留言人:<input type="text" name="user_name"><br>
<input type="submit" value="添加">
</form>
</body>
</html>
效果如下:
② 接收数据 store.php
// 接收表单提交过来的数据
$title = $_POST['title'];
$content = $_POST['content'];
$user_name = $_POST['user_name'];
if (empty($title) || empty($content) || empty($user_name)) {
exit('标题或者内容或者用户名不能为空');
}
// PDO操作数据库
try {
$dsn = 'mysql:dbname=test; host=localhost';
$username = 'root';
$password = '123456';
$attr = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
$pdo = new PDO($dsn, $username, $password, $attr);
$sql = 'insert into message(title, content, created_at, user_name) values(:title, :content, :created_at, :user_name)';
$stmt = $pdo->prepare($sql);
$data = [
':title' => $title,
':content' => $content,
':created_at' => time(),
':user_name' => $user_name
];
$stmt->execute($data);
$rows = $stmt->rowCount();
if ($rows) {
exit('添加成功');
} else {
exit('添加失败');
}
} catch(PDOException $e) {
// 异常
echo $e->getMessage();
}
二、解题方法
根据考题所出功能,先分析应该存储哪些信息,设计好数据表,这一步很关键,如果编码时才发现设计有问题,会浪费大量的时间,基本没有时间改,所以要先设计好,然后根据设计好的数据表创建数据表,通常建议大家使用PDO来连接MySQL,最终完成编码,所以一定要熟悉PDO的基本操作。
三、真题
设计一个无限分类表
1)方法一:存 id,title,在表中加一个 pid
,再配合递归实现。【推荐使用】
id | title | pid |
---|---|---|
1 | 服装 | 0 |
2 | 上衣 | 1 |
3 | 长袖 | 2 |
2)方法二:存 id,title,加 pid
和 path
(path是为了显示顺序,如果不加 path的话,需要用递归才能把级别显示出来)
id | title | pid | path(pid + id ) |
---|---|---|---|
1 | 服装 | 0 | 0- 1 |
2 | 上衣 | 1 | 0-1- 2 |
3 | 长袖 | 2 | 0-1-2- 3 |
综上所述,此题推荐使用 pid
+ 递归的方法实现,pid
关联的是 主键ID
。
来源:CSDN
作者:studyphp123
链接:https://blog.csdn.net/studyphp123/article/details/83821941