在本教程中,您将学习如何使用PHP和MySQL构建CRUD应用程序。
什么是CRUD
CRUD是C reate,R ead,U pdate和D elete 的首字母缩写。CRUD操作是数据库的基本数据操作。在前面的章节中,我们已经学习了如何执行创建(即插入),读取(即选择),更新和删除操作。在本教程中,我们将创建一个简单的PHP应用程序,以便在一处对MySQL数据库表执行所有这些操作。
好吧,让我们从创建表开始,我们将在所有示例中使用该表。
创建数据库表
执行以下SQL查询以在MySQL数据库中创建一个名为employees的表。我们将在以后的所有操作中使用此表。
CREATE TABLE employees (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
address VARCHAR(255) NOT NULL,
salary INT(10) NOT NULL
);
创建配置文件
创建表后,我们需要创建一个PHP脚本以连接到MySQL数据库服务器。让我们创建一个名为“ config.php”的文件,并将以下代码放入其中。
稍后,我们将使用PHP require_once()函数将此配置文件包含在其他页面中。
在线示例
/* 数据库凭证。 假设您正在运行MySQL
具有默认设置的服务器(用户“ root”,无密码) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
/* 尝试连接到MySQL数据库 */
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
//检查连接
if($link === false){
die("错误:无法连接。 " . mysqli_connect_error());
}
?>
创建登录页面
首先,我们将为CRUD应用程序创建一个登录页面,该页面包含一个数据网格,其中显示了employee数据库表中的记录。它还为网格中显示的每个记录都有操作图标,您可以选择查看其详细信息,对其进行更新或删除。
我们还将在数据网格的顶部添加一个创建按钮,该按钮可用于在employee表中创建新记录。创建一个名为“ index.php”的文件,并将以下代码放入其中:
在线示例
<html>
<head>
<meta charset="UTF-8">
<title>Dashboard</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"></script>
<style type="text/css">
.wrapper{
width: 650px;
margin: 0 auto;
}
.page-header h2{
margin-top: 0;
}
table tr td:last-child a{
margin-right: 15px;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
$('[data-toggle="tooltip"]').tooltip();
});
</script>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<div class="page-header clearfix">
<h2 class="pull-left">Employees Details</h2>
<a href="create.php" class="btn btn-success pull-right">Add New Employee</a>
</div>
//包括配置文件
require_once "config.php";
//尝试执行选择查询
$sql = "SELECT * FROM employees";
if($result = mysqli_query($link, $sql)){
if(mysqli_num_rows($result) > 0){
echo "
"
;
echo "";
echo "";
echo "#";
echo "Name";
echo "Address";
echo "Salary";
echo "Action";
echo "";
echo "";
echo "";
while($row = mysqli_fetch_array($result)){
echo "";
echo "" . $row['id'] . "";
echo "" . $row['name'] . "";
echo "" . $row['address'] . "";
echo "" . $row['salary'] . "";
echo "";
echo ". $row['id'] ."' title='View Record' data-toggle='tooltip'>";
echo ". $row['id'] ."' title='Update Record' data-toggle='tooltip'>";
echo ". $row['id'] ."' title='Delete Record' data-toggle='tooltip'>";
echo "";
echo "";
}
echo "";
echo "";
// Free result set
mysqli_free_result($result);
} else{
echo "
No records were found.
";
}
} else{
echo "错误:无法执行 $sql. " . mysqli_error($link);
}
//关闭连接
mysqli_close($link);
?>
</div>
</div>
</div>
</div>
</body>
</html>
在employees表中填充了一些记录后,登录页面即CRUD数据网格可能看起来如下图所示:

提示:我们使用了Bootstrap框架来快速,精美地制作此CRUD应用程序布局。Bootstrap是最流行,功能最强大的前端框架,用于更快,更轻松地响应Web开发。
创建录入页面
在本节中,我们将构建CRUD应用程序的C reate功能。
让我们创建一个名为“ create.php”的文件,并将以下代码放入其中。它将生成一个Web表单,可用于在employee表中插入记录。
在线示例
//包含配置文件
require_once "config.php";
//定义变量并使用空值进行初始化
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
//提交表单时处理表单数据
if($_SERVER["REQUEST_METHOD"] == "POST"){
// Validate name
$input_name = trim($_POST["name"]);
if(empty($input_name)){
$name_err = "请输入一个名字。";
} elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
$name_err = "请输入有效的名称。";
} else{
$name = $input_name;
}
//验证地址
$input_address = trim($_POST["address"]);
if(empty($input_address)){
$address_err = "Please enter an address.";
} else{
$address = $input_address;
}
//验证薪水
$input_salary = trim($_POST["salary"]);
if(empty($input_salary)){
$salary_err = "请输入薪资金额。";
} elseif(!ctype_digit($input_salary)){
$salary_err = "请输入一个正整数。";
} else{
$salary = $input_salary;
}
//插入数据库之前检查输入错误
if(empty($name_err) && empty($address_err) && empty($salary_err)){
//预处理INSERT语句
$sql = "INSERT INTO employees (name, address, salary) VALUES (?, ?, ?)";
if($stmt = mysqli_prepare($link, $sql)){
//将变量作为参数绑定到预处理语句
mysqli_stmt_bind_param($stmt, "sss", $param_name, $param_address, $param_salary);
// Set parameters
$param_name = $name;
$param_address = $address;
$param_salary = $salary;
// Attempt to execute the prepared statement
if(mysqli_stmt_execute($stmt)){
//已成功创建记录。 重定向至登录页面
header("location: index.php");
exit();
} else{
echo "出了些问题。 请稍后再试。";
}
}
// Close statement
mysqli_stmt_close($stmt);
}
//关闭连接
mysqli_close($link);
}
?>
<html>
<head>
<meta charset="UTF-8">
<title>Create Record</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
<style type="text/css">
.wrapper{
width: 500px;
margin: 0 auto;
}
</style>
</head>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<div class="page-header">
<h2>创建记录</h2>
</div>
<p>请填写此表格并提交以将员工记录添加到数据库中。</p>
<form action="PHP_SELF"]); ?>" method="post">
<div class="form-group ">
<label>Name</label>
<input type="text" name="name" class="form-control" value="">
<span class="help-block"> echo $name_err;?></span>
</div>
<div class="form-group ">
<label>Address</label>
<textarea name="address" class="form-control"> echo $address; ?></textarea>
<span class="help-block"> echo $address_err;?></span>
</div>
<div class="form-group ">
<label>Salary</label>
<input type="text" name="salary" class="form-control" value="">
<span class="help-block"> echo $salary_err;?></span>
</div>
<input type="submit" class="btn btn-primary" value="Submit">
<a href="index.php" class="btn btn-default">Cancel</a>
</form>
</div>
</div>
</div>
</div>
</html>
相同的“ create.php”文件将显示HTML表单并处理提交的表单数据。在保存数据之前,它还将对用户输入执行基本验证。
创建读取页面
现在该构建CRUD应用程序的R ead功能了。
让我们创建一个名为“ read.php”的文件,并将以下代码放入其中。它将仅根据雇员的id属性从employees表中检索记录。
在线示例
// 在进一步处理之前检查id参数是否存在
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
//包括配置文件
require_once "config.php";
//SELECT语句
$sql = "SELECT * FROM employees WHERE id = ?";
if($stmt = mysqli_prepare($link, $sql)){
//将变量作为参数绑定到预处理语句
mysqli_stmt_bind_param($stmt, "i", $param_id);
//设置参数
$param_id = trim($_GET["id"]);
//尝试执行预处理语句
if(mysqli_stmt_execute($stmt)){
$result = mysqli_stmt_get_result($stmt);
if(mysqli_num_rows($result) == 1){
/* 提取结果行作为关联数组。 由于结果集仅包含一行,因此我们不需要使用while循环*/
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
//检索单个字段值
$name = $row["name"];
$address = $row["address"];
$salary = $row["salary"];
} else{
//URL不包含有效的id参数。 重定向至错误页面
header("location: error.php");
exit();
}
} else{
echo "哎呀! 出了点问题。 请稍后再试。";
}
}
// Close statement
mysqli_stmt_close($stmt);
//关闭连接
mysqli_close($link);
} else{
//URL不包含id参数。 重定向至错误页面
header("location: error.php");
exit();
}
?>
<html>
<head>
<meta charset="UTF-8">
<title>View Record</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
<style type="text/css">
.wrapper{
width: 500px;
margin: 0 auto;
}
</style>
</head>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<div class="page-header">
<h1>查看记录</h1>
</div>
<div class="form-group">
<label>Name</label>
<p class="form-control-static"> echo $row["name"]; ?></p>
</div>
<div class="form-group">
<label>Address</label>
<p class="form-control-static"> echo $row["address"]; ?></p>
</div>
<div class="form-group">
<label>Salary</label>
<p class="form-control-static"> echo $row["salary"]; ?></p>
</div>
<p><a href="index.php" class="btn btn-primary">Back</a></p>
</div>
</div>
</div>
</div>
</html>
创建更新页面
同样,我们可以建立我们的CRUD应用UPDATE功能。
让我们创建一个名为“ update.php”的文件,并将以下代码放入其中。它将根据雇员的id属性更新雇员表中的现有记录。
在线示例
//包括配置文件
require_once "config.php";
//定义变量并使用空值进行初始化
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
//提交表单时处理表单数据
if(isset($_POST["id"]) && !empty($_POST["id"])){
// Get hidden input value
$id = $_POST["id"];
// Validate name
$input_name = trim($_POST["name"]);
if(empty($input_name)){
$name_err = "Please enter a name.";
} elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
$name_err = "Please enter a valid name.";
} else{
$name = $input_name;
}
// Validate address address
$input_address = trim($_POST["address"]);
if(empty($input_address)){
$address_err = "Please enter an address.";
} else{
$address = $input_address;
}
//验证薪水
$input_salary = trim($_POST["salary"]);
if(empty($input_salary)){
$salary_err = "请输入薪水金额。";
} elseif(!ctype_digit($input_salary)){
$salary_err = "请输入一个正整数值。";
} else{
$salary = $input_salary;
}
//在插入数据库之前检查输入错误
if(empty($name_err) && empty($address_err) && empty($salary_err)){
//UPDATE语句
$sql = "UPDATE employees SET name=?, address=?, salary=? WHERE id=?";
if($stmt = mysqli_prepare($link, $sql)){
//将变量作为参数绑定到预处理语句
mysqli_stmt_bind_param($stmt, "sssi", $param_name, $param_address, $param_salary, $param_id);
//设置参数
$param_name = $name;
$param_address = $address;
$param_salary = $salary;
$param_id = $id;
//尝试执行准备好的语句
if(mysqli_stmt_execute($stmt)){
//记录更新成功。 重定向至登录页面
header("location: index.php");
exit();
} else{
echo "出了点问题。 请稍后再试。";
}
}
// Close statement
mysqli_stmt_close($stmt);
}
//关闭连接
mysqli_close($link);
} else{
//在进一步处理之前检查id参数是否存在
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
//获取URL参数
$id = trim($_GET["id"]);
//select语句
$sql = "SELECT * FROM employees WHERE id = ?";
if($stmt = mysqli_prepare($link, $sql)){
//将变量作为参数绑定到预处理语句
mysqli_stmt_bind_param($stmt, "i", $param_id);
//设置参数
$param_id = $id;
//尝试执行准备好的语句
if(mysqli_stmt_execute($stmt)){
$result = mysqli_stmt_get_result($stmt);
if(mysqli_num_rows($result) == 1){
/* 提取结果行作为关联数组。 由于结果集仅包含一行,因此我们不需要使用while循环 */
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
//检索单个字段值
$name = $row["name"];
$address = $row["address"];
$salary = $row["salary"];
} else{
//URL不包含有效的ID。 重定向至错误页面
header("location: error.php");
exit();
}
} else{
echo "哎呀! 出了点问题。 请稍后再试。";
}
}
// Close statement
mysqli_stmt_close($stmt);
//关闭连接
mysqli_close($link);
} else{
//URL不包含id参数。 重定向至错误页面
header("location: error.php");
exit();
}
}
?>
<html>
<head>
<meta charset="UTF-8">
<title>Update Record</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
<style type="text/css">
.wrapper{
width: 500px;
margin: 0 auto;
}
</style>
</head>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<div class="page-header">
<h2>更新记录</h2>
</div>
<p>请编辑输入值并提交以更新记录。</p>
<form action="" method="post">
<div class="form-group ">
<label>Name</label>
<input type="text" name="name" class="form-control" value="">
<span class="help-block"> echo $name_err;?></span>
</div>
<div class="form-group ">
<label>Address</label>
<textarea name="address" class="form-control"> echo $address; ?></textarea>
<span class="help-block"> echo $address_err;?></span>
</div>
<div class="form-group ">
<label>Salary</label>
<input type="text" name="salary" class="form-control" value="">
<span class="help-block"> echo $salary_err;?></span>
</div>
<input type="hidden" name="id" value=""/>
<input type="submit" class="btn btn-primary" value="Submit">
<a href="index.php" class="btn btn-default">Cancel</a>
</form>
</div>
</div>
</div>
</div>
</html>
创建删除页面
最后,我们将构建d我们的CRUD应用elete功能。
让我们创建一个名为“ delete.php”的文件,并将以下代码放入其中。它将根据雇员的id属性从雇员表中删除现有记录。
在线示例
//确认后进行删除操作
if(isset($_POST["id"]) && !empty($_POST["id"])){
//包含配置文件
require_once "config.php";
//DELETE语句
$sql = "DELETE FROM employees WHERE id = ?";
if($stmt = mysqli_prepare($link, $sql)){
//将变量作为参数绑定到预处理语句
mysqli_stmt_bind_param($stmt, "i", $param_id);
// Set parameters
$param_id = trim($_POST["id"]);
//尝试执行准备好的语句
if(mysqli_stmt_execute($stmt)){
//删除记录成功。重定向到登录页
header("location: index.php");
exit();
} else{
echo "哎呀! 出了点问题。 请稍后再试。";
}
}
// Close statement
mysqli_stmt_close($stmt);
//关闭连接
mysqli_close($link);
} else{
//检查id参数是否存在
if(empty(trim($_GET["id"]))){
//URL不包含id参数。 重定向至错误页面
header("location: error.php");
exit();
}
}
?>
<form action="PHP_SELF"]); ?>" method="post">
<div class="alert alert-danger fade in">
<input type="hidden" name="id" value="id"]); ?>"/>
<p>您确定要删除此记录吗?</p><br>
<p>
<input type="submit" value="Yes" class="btn btn-danger">
<a href="index.php" class="btn btn-default">No</a>
</p>
</div>
</form>
创建错误页面
最后,让我们再创建一个文件“ error.php”。如果请求无效,即URL查询字符串中缺少id参数或该参数无效,将显示此页面。
<h1>无效请求</h1>
<div class="alert alert-danger fade in">
<p>抱歉,您提出的请求无效。 请 <a href="index.php" class="alert-link">返回</a> 然后再试一次.</p>
</div>
经过漫长的旅程,终于我们用PHP和MySQL完成了CRUD应用程序。