一.PHP MySQL数据库
- 数据库是按照数据结构来组织,存储和管理数据的仓库。
- 每个数据库都有一个或者多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
1.MySQL简介
- MySQL是最流行的关系型数据库管理系统
- 使用MySQL来实现php文件和数据库的通信或者链接
- SQL:Structured Query Language(结构化查询语言)
- 若干的表单组成数据库
- 每个表单存储特定类型的数据
- 表头为记录名称/属性
- 每列为记录名称所对应的数据域/属性值
- 可以在php代码中使用SQL结构化查询语句与数据库进行通信
- 外键:用于关联两个表
2.创建MySQL数据库
1)打开XAMPP Control panel面板,启动Apache,MySQL服务。

2)在浏览器地址栏输入: http://localhost/phpmyadmin/ 回车。显示如下:

3)点击数据库标签,在下方输入数据库名称,点击创建:

创建成功后显示如下:

4)创建数据表
输入表名称,字段数,点击创建:

创建成功后显示如下:

输入对应的字段名称,类型,长度等,点击保存:

保存成功后如下:

5)插入数据
点击插入标签页,输入对应字段的值,点击执行:

执行成功后如下:

也可点击在表中查看:


3.连接MySQL数据库
1)创建账户
点击账户标签页,点击下方新增用户账户:

输入用户名,主机名,密码等信息,点击执行:

执行成功后如下:

2)连接mysql数据库方式(mysqli & PDO)
- PDO 应用在 12 种不同数据库中, MySQLi 只针对 MySQL 数据库。如果你的项目需要在多种数据库中切换,建议使用 PDO ,这样你只需要修改连接字符串和部分查询语句即可。 使用 MySQLi, 如果不同数据库,你需要重新编写所有代码,包括查询。
- 两者都是面向对象, 但 MySQLi 还提供了 API 接口。
- 两者都支持预处理语句。预处理语句可以防止 SQL 注入,对于 web 项目的安全性是非常重要的。
A. mysqli函数
函数 | 描述 |
mysqli_connect() | 打开一个到 MySQL 服务器的新的连接。 |
mysqli_connect_error() | 返回上一次连接错误的错误描述。 |
mysqli_query() | 执行某个针对数据库的查询。 |
mysqli_fetch_all() | 从结果集中取得所有行作为关联数组,或数字数组,或二者兼有。 |
mysqli_free_result() | 释放结果内存。 |
mysqli_close() | 关闭先前打开的数据库连接。 |
B. mysqli连接
<?php
// mysql & PDO
//连接数据库 mysqli_connect('主机','用户名','密码','数据库名')
$conn = mysqli_connect('localhost','msonline','admin@123','msonline courses');
//检测是否连接成功
if(!$conn) {
echo '数据库连接失败:' . mysqli_connect_error();
}
?>
C. mysqli读取数据
<?php
// mysql & PDO
//连接数据库 mysqli_connect('主机','用户名','密码','数据库名')
$conn = mysqli_connect('localhost','msonline','admin@123','msonline courses');
//检测是否连接成功
if(!$conn) {
echo '数据库连接失败:' . mysqli_connect_error();
}
//读取数据
//创建SQL查询语句
$sql = 'SELECT title, points, id FROM courses ORDER BY created_at';
//执行语句得到返回结果对象 mysqli_query('连接的数据库', '语句')
$result = mysqli_query($conn, $sql);
//获取结果对象并格式化(关联数组) mysqli_fetch_all('结果集','数组类型(MYSQLI_ASSOC|MYSQLI_NUM|MYSQLI_BOTH)')
$courses = mysqli_fetch_all($result,MYSQLI_ASSOC);
//释放结果内存
mysqli_free_result($result);
//关闭数据库连接
mysqli_close($conn);
print_r($courses);
?>
D. 渲染数据
<!DOCTYPE html>
<html lang="en">
<?php include('templates/header.php'); ?>
<h4 class="center grey-text">课程列表</h4>
<div class="container">
<div class="row">
<?php foreach($courses as $course) {; ?>
<div class="col s6 md3">
<div class="card z-depth-0">
<div class="card-content center">
<h6><?php echo htmlspecialchars($course['title']);?></h6>
<div><?php echo htmlspecialchars($course['points']);?></div>
</div>
<div class="card-action right-align">
<a href="#" class="brand-text">了解更多</a>
</div>
</div>
</div>
<?php }; ?>
</div>
</div>
<?php include('templates/footer.php'); ?>
</html>
E. PHP String函数 - explode
explode() 函数使用一个字符串分割另一个字符串,并返回由字符串组成的数组。
函数 | 描述 |
explode() | 把字符串打散为数组。 |
<?php
explode(',','php,mvc,mysql');
?>
<!DOCTYPE html>
<html lang="en">
<?php include('templates/header.php'); ?>
<h4 class="center grey-text">课程列表</h4>
<div class="container">
<div class="row">
<?php foreach($courses as $course) {; ?>
<div class="col s6 md3">
<div class="card z-depth-0">
<div class="card-content center">
<h6><?php echo htmlspecialchars($course['title']);?></h6>
<ul class="grey-text">
<?php foreach(explode(',',$course['points']) as $point) {?>
<li><?php echo htmlspecialchars($point);?></li>
<?php }?>
</ul>
</div>
<div class="card-action right-align">
<a href="#" class="brand-text">了解更多</a>
</div>
</div>
</div>
<?php }; ?>
</div>
</div>
<?php include('templates/footer.php'); ?>
</html>
F. 流程控制替代语法
<?php
//foreach() :
// endforeach;
// if():
// else :
// endif;
?>
<!DOCTYPE html>
<html lang="en">
<?php include('templates/header.php'); ?>
<h4 class="center grey-text">课程列表</h4>
<div class="container">
<div class="row">
<?php foreach($courses as $course):; ?>
<div class="col s6 md3">
<div class="card z-depth-0">
<div class="card-content center">
<h6><?php echo htmlspecialchars($course['title']);?></h6>
<ul class="grey-text">
<?php foreach(explode(',',$course['points']) as $point) :?>
<li><?php echo htmlspecialchars($point);?></li>
<?php endforeach; ?>
</ul>
</div>
<div class="card-action right-align">
<a href="#" class="brand-text">了解更多</a>
</div>
</div>
</div>
<?php endforeach; ?>
<!--if语句-->
<?php if(count($courses) >= 2): ?>
<p>至少有两个课程内容</p>
<?php else:?>
<p>少于两个课程</p>
<?php endif;?>
</div>
</div>
<?php include('templates/footer.php'); ?>
</html>
G. 存储数据
新建config/db_connect.php文件,将连接数据库部分提取出来:
<?php
// mysql & PDO
//连接数据库 mysqli_connect('主机','用户名','密码','数据库名')
$conn = mysqli_connect('localhost','msonline','admin@123','msonline courses');
//检测是否连接成功
if(!$conn) {
echo '数据库连接失败:' . mysqli_connect_error();
}
?>
连接数据库,存储数据到数据库。
mysqli函数:
函数 | 描述 |
mysqli_real_escape_string() | 转义在 SQL 语句中使用的字符串中的特殊字符。 |
语法:mysqli_real_escape_string(connection,escapestring);
<?php
//连接数据库
include('config/db_connect.php');
... ...
... ...
//所有验证通过
if(array_filter($errors)) {
echo '表单中存在错误信息';
}else {
//表单验证通过
//存储数据到数据库
// 格式化存储数据
$email = mysqli_real_escape_string($conn, $_POST['email']);
$title = mysqli_real_escape_string($conn, $_POST['title']);
$points = mysqli_real_escape_string($conn, $_POST['points']);
//创建sql语句
$sql = "INSERT INTO courses(title,email,points) VALUES('$title','$email','$points')";
//存储数据到数据库并验证
if(mysqli_query($conn, $sql)) {
//保存成功
header('Location:index.php');
exit;
}else {
echo 'query error:' .mysqli_error($conn);
}
}
?>
H. 获取单个数据
新建details.php文件。
<?php
//连接数据库
include('config/db_connect.php');
//验证是否是get请求
if(isset($_GET['id'])) {
//初始化id
$id = mysqli_real_escape_string($conn, $_GET['id']);
//创建sql语句
$sql = "SELECT * FROM courses WHERE id = $id";
//执行语句,获得结果
$result = mysqli_query($conn, $sql);
//获取单个结果转换为数组格式
$course = mysqli_fetch_assoc($result);
//释放结果内存
mysqli_free_result($result);
//关闭数据库连接
mysqli_close($conn);
}
?>
<!DOCTYPE html>
<html lang="en">
<?php include('templates/header.php'); ?>
<div class="container center">
<?php if($course):?>
<h4>课程标题:<?php echo $course['title']; ?></h4>
<p>课程作者:<?php echo $course['email']; ?></p>
<p>创建时间:<?php echo $course['created_at']; ?></p>
<h5>知识要点</h5>
<p><?php echo $course['points']; ?></p>
<?php else:?>
<h5>抱歉,该课程详情不存在!</h5>
<?php endif;?>
</div>
<?php include('templates/footer.php'); ?>
</html>
mysqli函数:
函数 | 描述 |
mysqli_fetch_assoc() | 从结果集中取得一行作为关联数组。 |
I. 删除数据
<?php
//连接数据库
include('config/db_connect.php');
//删除
if(isset($_POST['delete'])) {
//初始化id
$id_to_delete = mysqli_real_escape_string($conn, $_POST['id_to_delete']);
//创建sql语句
$sql = "DELETE FROM courses WHERE id = $id_to_delete";
//执行查询语句
if(mysqli_query($conn, $sql)) {
//删除成功
header('Location: index.php');
}else {
//删除失败
echo 'query error: '. mysqli_error($conn);
}
}
... ...
... ...
?>
<!DOCTYPE html>
<html lang="en">
<?php include('templates/header.php'); ?>
<div class="container center">
<?php if($course):?>
<h4>课程标题:<?php echo $course['title']; ?></h4>
<p>课程作者:<?php echo $course['email']; ?></p>
<p>创建时间:<?php echo $course['created_at']; ?></p>
<h5>知识要点</h5>
<p><?php echo $course['points']; ?></p>
<!--删除表单-->
<form action="details.php" method="POST">
<input type="hidden" name="id_to_delete" value="<?php echo $course['id'];?>">
<input type="submit" name="delete" value="删除" class="btn brand z-depth-0">
</form>
<?php else:?>
<h5>抱歉,该课程详情不存在!</h5>
<?php endif;?>
</div>
<?php include('templates/footer.php'); ?>
</html>