CRUD là từ viết tắt của C reate, R ead, U pdate và D elete. Hoạt động CRUD là thao tác dữ liệu cơ bản cho cơ sở dữ liệu. Chúng ta đã học cách thực hiện các thao tác tạo (create), đọc (read), cập nhật (update) và xóa (delete) trong các chương trước. Trong hướng dẫn này, chúng tôi sẽ tạo một ứng dụng PHP đơn giản để thực hiện tất cả các hoạt động này trên bảng cơ sở dữ liệu MySQL tại một nơi.
Vâng, hãy bắt đầu bằng cách tạo bảng mà chúng tôi sẽ sử dụng trong tất cả các ví dụ của chúng tôi.
Tạo bảng cơ sở dữ liệu
Thực thi truy vấn SQL sau để tạo một bảng có tên là nhanvien bên trong cơ sở dữ liệu MySQL của bạn. Chúng tôi sẽ sử dụng bảng này cho tất cả các hoạt động trong tương lai của chúng tôi.
Ví dụ
CREATE TABLE nhanvien ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, address VARCHAR(255) NOT NULL, salary INT(10) NOT NULL );
Tạo tệp cấu hình
Sau khi tạo bảng, chúng ta cần tạo một tập lệnh PHP để kết nối với máy chủ cơ sở dữ liệu MySQL. Hãy tạo một tệp có tên "config.php" và đặt đoạn mã sau vào bên trong nó.
Sau đó, chúng tôi sẽ đưa tệp cấu hình này vào các trang khác bằng cách sử dụng hàm require_once() .
Thủ tục
Ví dụ
Hướng đối tượng
Ví dụ
connect_error); } ?>
PDO
Ví dụ
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e){ die("ERROR: Could not connect. " . $e->getMessage()); } ?>
Ghi chú: Thay thế thông tin đăng nhập theo cài đặt máy chủ MySQL của bạn trước khi kiểm tra mã này, ví dụ: thay thế tên cơ sở dữ liệu 'demo' bằng tên cơ sở dữ liệu của riêng bạn, thay thế tên người dùng 'root' bằng tên người dùng cơ sở dữ liệu của riêng bạn, nhập vào mật khẩu cơ sở dữ liệu nếu có.
Tạo trang chủ
Đầu tiên, chúng ta sẽ tạo một trang chủ cho ứng dụng CRUD của chúng ta có chứa một lưới dữ liệu hiển thị các bản ghi từ bảng cơ sở dữ liệu nhanvien . Nó cũng có các biểu tượng hành động cho mỗi bản ghi được hiển thị trong lưới, bạn có thể chọn xem chi tiết, cập nhật hoặc xóa bản ghi đó.
Chúng ta cũng sẽ thêm một nút tạo ở trên cùng của lưới dữ liệu có thể được sử dụng để tạo các bản ghi mới trong bảng nhanvien. Tạo một tệp có tên "index.php" và đặt mã sau vào đó:
"; // Free result set unset($result); } else{ echo '
No records were found.
'; } } else{ echo "Oops! Something went wrong. Please try again later."; } // Close connection unset($pdo); ?>
Khi bảng nhanvien được điền với một số bản ghi thì trang chủ tức là lưới dữ liệu CRUD có thể trông giống như hình bên dưới:
Mẹo: Tôi đã sử dụng Bootstrap để tạo bố cục ứng dụng CRUD này một cách nhanh chóng và đẹp mắt. Bootstrap là front-end framework phổ biến và mạnh mẽ nhất để phát triển web đáp ứng nhanh hơn và dễ dàng hơn. Vui lòng xem phần hướng dẫn Bootstrap để tìm hiểu thêm về framework này.
Tạo Trang Tạo
Trong phần này, chúng ta sẽ xây dựng chức năng C reate của ứng dụng CRUD của chúng ta.
Hãy tạo một tệp có tên "create.php" và đặt đoạn mã sau vào bên trong nó. Nó sẽ tạo ra một biểu mẫu web có thể được sử dụng để chèn các bản ghi trong bảng nhân viên .
Thủ tục
Ví dụ
array("regexp"=>"/^[a-zA-Z\s]+$/")))){ $name_err = "Please enter a valid name."; } else{ $name = $input_name; } // Validate address $input_address = trim($_POST["address"]); if(empty($input_address)){ $address_err = "Please enter an address."; } else{ $address = $input_address; } // Validate salary $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "Please enter the salary amount."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Please enter a positive integer value."; } else{ $salary = $input_salary; } // Check input errors before inserting in database if(empty($name_err) && empty($address_err) && empty($salary_err)){ // Prepare an insert statement $sql = "INSERT INTO nhanvien (name, address, salary) VALUES (?, ?, ?)"; if($stmt = mysqli_prepare($link, $sql)){ // Bind variables to the prepared statement as parameters 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)){ // Records created successfully. Redirect to landing page header("location: index.php"); exit(); } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement mysqli_stmt_close($stmt); } // Close connection mysqli_close($link); } ?>
Create Record
Please fill this form and submit to add employee record to the database.
array("regexp"=>"/^[a-zA-Z\s]+$/")))){ $name_err = "Please enter a valid name."; } else{ $name = $input_name; } // Validate address $input_address = trim($_POST["address"]); if(empty($input_address)){ $address_err = "Please enter an address."; } else{ $address = $input_address; } // Validate salary $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "Please enter the salary amount."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Please enter a positive integer value."; } else{ $salary = $input_salary; } // Check input errors before inserting in database if(empty($name_err) && empty($address_err) && empty($salary_err)){ // Prepare an insert statement $sql = "INSERT INTO nhanvien (name, address, salary) VALUES (?, ?, ?)"; if($stmt = $mysqli->prepare($sql)){ // Bind variables to the prepared statement as parameters $stmt->bind_param("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($stmt->execute()){ // Records created successfully. Redirect to landing page header("location: index.php"); exit(); } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement $stmt->close(); } // Close connection $mysqli->close(); } ?>
Create Record
Please fill this form and submit to add employee record to the database.
PDO
Ví dụ
array("regexp"=>"/^[a-zA-Z\s]+$/")))){ $name_err = "Please enter a valid name."; } else{ $name = $input_name; } // Validate address $input_address = trim($_POST["address"]); if(empty($input_address)){ $address_err = "Please enter an address."; } else{ $address = $input_address; } // Validate salary $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "Please enter the salary amount."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Please enter a positive integer value."; } else{ $salary = $input_salary; } // Check input errors before inserting in database if(empty($name_err) && empty($address_err) && empty($salary_err)){ // Prepare an insert statement $sql = "INSERT INTO nhanvien (name, address, salary) VALUES (:name, :address, :salary)"; if($stmt = $pdo->prepare($sql)){ // Bind variables to the prepared statement as parameters $stmt->bindParam(":name", $param_name); $stmt->bindParam(":address", $param_address); $stmt->bindParam(":salary", $param_salary); // Set parameters $param_name = $name; $param_address = $address; $param_salary = $salary; // Attempt to execute the prepared statement if($stmt->execute()){ // Records created successfully. Redirect to landing page header("location: index.php"); exit(); } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement unset($stmt); } // Close connection unset($pdo); } ?>
Create Record
Please fill this form and submit to add employee record to the database.
Tệp "create.php" tương tự sẽ hiển thị biểu mẫu HTML và xử lý dữ liệu biểu mẫu đã gửi. Nó cũng sẽ thực hiện xác nhận cơ bản đối với đầu vào của người dùng ( dòng từ 11 đến 37 ) trước khi lưu dữ liệu.
Tạo trang đã đọc
Bây giờ đã đến lúc xây dựng chức năng R ead của ứng dụng CRUD của chúng ta.
Hãy tạo một tệp có tên "read.php" và đặt đoạn mã sau vào bên trong nó. Nó sẽ chỉ lấy các bản ghi từ bảng nhavien dựa trên thuộc tính id của nhân viên.
prepare($sql)){ // Bind variables to the prepared statement as parameters $stmt->bind_param("i", $param_id); // Set parameters $param_id = trim($_GET["id"]); // Attempt to execute the prepared statement if($stmt->execute()){ $result = $stmt->get_result(); if($result->num_rows == 1){ /* Fetch result row as an associative array. Since the result set contains only one row, we don't need to use while loop */ $row = $result->fetch_array(MYSQLI_ASSOC); // Retrieve individual field value $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ // URL doesn't contain valid id parameter. Redirect to error page header("location: error.php"); exit(); } } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement $stmt->close(); // Close connection $mysqli->close(); } else{ // URL doesn't contain id parameter. Redirect to error page header("location: error.php"); exit(); } ?>
prepare($sql)){ // Bind variables to the prepared statement as parameters $stmt->bindParam(":id", $param_id); // Set parameters $param_id = trim($_GET["id"]); // Attempt to execute the prepared statement if($stmt->execute()){ if($stmt->rowCount() == 1){ /* Fetch result row as an associative array. Since the result set contains only one row, we don't need to use while loop */ $row = $stmt->fetch(PDO::FETCH_ASSOC); // Retrieve individual field value $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ // URL doesn't contain valid id parameter. Redirect to error page header("location: error.php"); exit(); } } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement unset($stmt); // Close connection unset($pdo); } else{ // URL doesn't contain id parameter. Redirect to error page header("location: error.php"); exit(); } ?>
Tương tự, chúng ta có thể xây dựng chức năng U pdate của ứng dụng CRUD của chúng ta.
Hãy tạo một tệp có tên "update.php" và đặt đoạn mã sau vào bên trong nó. Nó sẽ cập nhật các bản ghi hiện có trong bảng nhanvien dựa trên thuộc tính id của nhân viên.
Thủ tục
Ví dụ
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; } // Validate salary $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "Please enter the salary amount."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Please enter a positive integer value."; } else{ $salary = $input_salary; } // Check input errors before inserting in database if(empty($name_err) && empty($address_err) && empty($salary_err)){ // Prepare an update statement $sql = "UPDATE nhanvien SET name=?, address=?, salary=? WHERE id=?"; if($stmt = mysqli_prepare($link, $sql)){ // Bind variables to the prepared statement as parameters mysqli_stmt_bind_param($stmt, "sssi", $param_name, $param_address, $param_salary, $param_id); // Set parameters $param_name = $name; $param_address = $address; $param_salary = $salary; $param_id = $id; // Attempt to execute the prepared statement if(mysqli_stmt_execute($stmt)){ // Records updated successfully. Redirect to landing page header("location: index.php"); exit(); } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement mysqli_stmt_close($stmt); } // Close connection mysqli_close($link); } else{ // Check existence of id parameter before processing further if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ // Get URL parameter $id = trim($_GET["id"]); // Prepare a select statement $sql = "SELECT * FROM nhanvien WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ // Bind variables to the prepared statement as parameters mysqli_stmt_bind_param($stmt, "i", $param_id); // Set parameters $param_id = $id; // Attempt to execute the prepared statement if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) == 1){ /* Fetch result row as an associative array. Since the result set contains only one row, we don't need to use while loop */ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); // Retrieve individual field value $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ // URL doesn't contain valid id. Redirect to error page header("location: error.php"); exit(); } } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement mysqli_stmt_close($stmt); // Close connection mysqli_close($link); } else{ // URL doesn't contain id parameter. Redirect to error page header("location: error.php"); exit(); } } ?>
Update Record
Please edit the input values and submit to update the employee record.
Hướng đối tượng
Ví dụ
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; } // Validate salary $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "Please enter the salary amount."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Please enter a positive integer value."; } else{ $salary = $input_salary; } // Check input errors before inserting in database if(empty($name_err) && empty($address_err) && empty($salary_err)){ // Prepare an update statement $sql = "UPDATE nhanvien SET name=?, address=?, salary=? WHERE id=?"; if($stmt = $mysqli->prepare($sql)){ // Bind variables to the prepared statement as parameters $stmt->bind_param("sssi", $param_name, $param_address, $param_salary, $param_id); // Set parameters $param_name = $name; $param_address = $address; $param_salary = $salary; $param_id = $id; // Attempt to execute the prepared statement if($stmt->execute()){ // Records updated successfully. Redirect to landing page header("location: index.php"); exit(); } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement $stmt->close(); } // Close connection $mysqli->close(); } else{ // Check existence of id parameter before processing further if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ // Get URL parameter $id = trim($_GET["id"]); // Prepare a select statement $sql = "SELECT * FROM nhanvien WHERE id = ?"; if($stmt = $mysqli->prepare($sql)){ // Bind variables to the prepared statement as parameters $stmt->bind_param("i", $param_id); // Set parameters $param_id = $id; // Attempt to execute the prepared statement if($stmt->execute()){ $result = $stmt->get_result(); if($result->num_rows == 1){ /* Fetch result row as an associative array. Since the result set contains only one row, we don't need to use while loop */ $row = $result->fetch_array(MYSQLI_ASSOC); // Retrieve individual field value $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ // URL doesn't contain valid id. Redirect to error page header("location: error.php"); exit(); } } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement $stmt->close(); // Close connection $mysqli->close(); } else{ // URL doesn't contain id parameter. Redirect to error page header("location: error.php"); exit(); } } ?>
Update Record
Please edit the input values and submit to update the employee record.
PDO
Ví dụ
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; } // Validate salary $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "Please enter the salary amount."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Please enter a positive integer value."; } else{ $salary = $input_salary; } // Check input errors before inserting in database if(empty($name_err) && empty($address_err) && empty($salary_err)){ // Prepare an update statement $sql = "UPDATE nhanvien SET name=:name, address=:address, salary=:salary WHERE id=:id"; if($stmt = $pdo->prepare($sql)){ // Bind variables to the prepared statement as parameters $stmt->bindParam(":name", $param_name); $stmt->bindParam(":address", $param_address); $stmt->bindParam(":salary", $param_salary); $stmt->bindParam(":id", $param_id); // Set parameters $param_name = $name; $param_address = $address; $param_salary = $salary; $param_id = $id; // Attempt to execute the prepared statement if($stmt->execute()){ // Records updated successfully. Redirect to landing page header("location: index.php"); exit(); } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement unset($stmt); } // Close connection unset($pdo); } else{ // Check existence of id parameter before processing further if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ // Get URL parameter $id = trim($_GET["id"]); // Prepare a select statement $sql = "SELECT * FROM nhanvien WHERE id = :id"; if($stmt = $pdo->prepare($sql)){ // Bind variables to the prepared statement as parameters $stmt->bindParam(":id", $param_id); // Set parameters $param_id = $id; // Attempt to execute the prepared statement if($stmt->execute()){ if($stmt->rowCount() == 1){ /* Fetch result row as an associative array. Since the result set contains only one row, we don't need to use while loop */ $row = $stmt->fetch(PDO::FETCH_ASSOC); // Retrieve individual field value $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ // URL doesn't contain valid id. Redirect to error page header("location: error.php"); exit(); } } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement unset($stmt); // Close connection unset($pdo); } else{ // URL doesn't contain id parameter. Redirect to error page header("location: error.php"); exit(); } } ?>
Update Record
Please edit the input values and submit to update the employee record.
Tạo Trang Xóa
Cuối cùng, chúng ta sẽ xây dựng chức năng D elete của ứng dụng CRUD của chúng ta.
Hãy tạo một tệp có tên "delete.php" và đặt đoạn mã sau vào bên trong nó. Nó sẽ xóa các bản ghi hiện có khỏi bảng nhanvien dựa trên thuộc tính id của nhân viên.
Thủ tục
Ví dụ
Delete Record
Hướng đối tượng
Ví dụ
prepare($sql)){ // Bind variables to the prepared statement as parameters $stmt->bind_param("i", $param_id); // Set parameters $param_id = trim($_POST["id"]); // Attempt to execute the prepared statement if($stmt->execute()){ // Records deleted successfully. Redirect to landing page header("location: index.php"); exit(); } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement $stmt->close(); // Close connection $mysqli->close(); } else{ // Check existence of id parameter if(empty(trim($_GET["id"]))){ // URL doesn't contain id parameter. Redirect to error page header("location: error.php"); exit(); } } ?>
Delete Record
PDO
Ví dụ
prepare($sql)){ // Bind variables to the prepared statement as parameters $stmt->bindParam(":id", $param_id); // Set parameters $param_id = trim($_POST["id"]); // Attempt to execute the prepared statement if($stmt->execute()){ // Records deleted successfully. Redirect to landing page header("location: index.php"); exit(); } else{ echo "Oops! Something went wrong. Please try again later."; } } // Close statement unset($stmt); // Close connection unset($pdo); } else{ // Check existence of id parameter if(empty(trim($_GET["id"]))){ // URL doesn't contain id parameter. Redirect to error page header("location: error.php"); exit(); } } ?>
Delete Record
Tạo trang lỗi
Cuối cùng, hãy tạo thêm một tệp "error.php". Trang này sẽ được hiển thị nếu yêu cầu không hợp lệ, tức là nếu tham số id bị thiếu trong chuỗi truy vấn URL hoặc nó không hợp lệ.
Ví dụ
Invalid Request
Sorry, you've made an invalid request. Please go back and try again.
Sau một hành trình dài cuối cùng chúng tôi đã hoàn thành ứng dụng CRUD của mình với PHP và MySQL. Chúng tôi khuyên bạn nên xem phần hướng dẫn cơ sở dữ liệu PHP & MySQL ngay từ đầu, nếu bạn chưa học, để hiểu rõ hơn về từng phần của hướng dẫn này.