【PHP常見面試題 程式功能設計】先寫一個線上留言本,實現使用者的線上留言功能,留言資訊儲存到資料庫,要求書籍資料表內容以及使用PHP編碼完成。
阿新 • • 發佈:2018-12-19
一、考點
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 |