Thêm dữ liệu vào bảng
Trong hướng dẫn này, bạn sẽ học cách chèn thêm các bản ghi vào bảng MySQL bằng PHP.
Chèn dữ liệu vào bảng cơ sở dữ liệu MySQL
Bây giờ bạn đã hiểu cách tạo cơ sở dữ liệu và bảng trong MySQL. Trong hướng dẫn này, bạn sẽ học cách thực thi truy vấn SQL để chèn các bản ghi vào bảng.
Câu lệnh INSERT INTO
được sử dụng để chèn các hàng mới trong bảng cơ sở dữ liệu.
Hãy tạo một truy vấn SQL bằng cách sử dụng câu lệnh INSERT INTO
với các giá trị thích hợp, sau đó chúng ta sẽ thực hiện truy vấn chèn này thông qua việc chuyển nó đến hàm mysqli_query()
để chèn dữ liệu trong bảng. Dưới đây là một ví dụ, chèn một hàng mới vào bảng persons bằng cách chỉ định giá trị cho các trường first_name , last_name và email .
Thủ tục
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$link = mysqli_connect("localhost", "root", "", "demo");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Attempt insert query execution
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";
if(mysqli_query($link, $sql)){
echo "Records inserted successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// Close connection
mysqli_close($link);
?>
Hướng đối tượng
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$mysqli = new mysqli("localhost", "root", "", "demo");
// Check connection
if($mysqli === false){
die("ERROR: Could not connect. " . $mysqli->connect_error);
}
// Attempt insert query execution
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";
if($mysqli->query($sql) === true){
echo "Records inserted successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . $mysqli->error;
}
// Close connection
$mysqli->close();
?>
PDO
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
try{
$pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
// Set the PDO error mode to exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("ERROR: Could not connect. " . $e->getMessage());
}
// Attempt insert query execution
try{
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";
$pdo->exec($sql);
echo "Records inserted successfully.";
} catch(PDOException $e){
die("ERROR: Could not able to execute $sql. " . $e->getMessage());
}
// Close connection
unset($pdo);
?>
Nếu bạn nhớ từ chương trước , trường id đã được đánh dấu bằng AUTO_INCREMENT
. Công cụ sửa đổi này yêu cầu MySQL tự động gán một giá trị cho trường này nếu nó không được chỉ định, bằng cách tăng giá trị trước đó lên 1.
Chèn nhiều hàng vào bảng
Bạn cũng có thể chèn nhiều hàng vào bảng bằng một truy vấn chèn cùng một lúc. Để thực hiện việc này, hãy bao gồm nhiều danh sách giá trị cột trong câu lệnh INSERT INTO
, trong đó giá trị cột cho mỗi hàng phải được đặt trong dấu ngoặc đơn và được phân tách bằng dấu phẩy.
Hãy chèn thêm một vài hàng vào bảng persons , như thế này:
Thủ tục
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$link = mysqli_connect("localhost", "root", "", "demo");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Attempt insert query execution
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES
('John', 'Rambo', 'johnrambo@mail.com'),
('Clark', 'Kent', 'clarkkent@mail.com'),
('John', 'Carter', 'johncarter@mail.com'),
('Harry', 'Potter', 'harrypotter@mail.com')";
if(mysqli_query($link, $sql)){
echo "Records added successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// Close connection
mysqli_close($link);
?>
Hướng đối tượng
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$mysqli = new mysqli("localhost", "root", "", "demo");
// Check connection
if($mysqli === false){
die("ERROR: Could not connect. " . $mysqli->connect_error);
}
// Attempt insert query execution
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES
('John', 'Rambo', 'johnrambo@mail.com'),
('Clark', 'Kent', 'clarkkent@mail.com'),
('John', 'Carter', 'johncarter@mail.com'),
('Harry', 'Potter', 'harrypotter@mail.com')";
if($mysqli->query($sql) === true){
echo "Records inserted successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . $mysqli->error;
}
// Close connection
$mysqli->close();
?>
PDO
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
try{
$pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
// Set the PDO error mode to exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("ERROR: Could not connect. " . $e->getMessage());
}
// Attempt insert query execution
try{
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES
('John', 'Rambo', 'johnrambo@mail.com'),
('Clark', 'Kent', 'clarkkent@mail.com'),
('John', 'Carter', 'johncarter@mail.com'),
('Harry', 'Potter', 'harrypotter@mail.com')";
$pdo->exec($sql);
echo "Records inserted successfully.";
} catch(PDOException $e){
die("ERROR: Could not able to execute $sql. " . $e->getMessage());
}
// Close connection
unset($pdo);
?>
Bây giờ, hãy truy cập phpMyAdmin (http://localhost/phpmyadmin/
hoặc http://127.0.0.1/openserver/phpmyadmin/
nếu dùng OpenServer) và kiểm tra dữ liệu bảng persons bên trong cơ sở dữ liệu demo . Bạn sẽ thấy giá trị cho cột id được gán tự động bằng cách tăng giá trị của id trước đó lên 1.
Ghi chú: Bất kỳ số lượng ngắt dòng nào cũng có thể xảy ra trong câu lệnh SQL, miễn là bất kỳ ngắt dòng nào không ngắt các từ khóa, giá trị, biểu thức, v.v.
Chèn dữ liệu vào cơ sở dữ liệu từ biểu mẫu HTML
Trong phần trước, chúng ta đã học cách chèn dữ liệu vào cơ sở dữ liệu từ một tập lệnh PHP. Bây giờ, chúng ta sẽ xem cách chúng ta có thể chèn dữ liệu vào cơ sở dữ liệu thu được từ biểu mẫu HTML. Hãy tạo một biểu mẫu HTML có thể được sử dụng để chèn các bản ghi mới vào bảng persons .
Bước 1: Tạo biểu mẫu HTML
Đây là một biểu mẫu HTML đơn giản có ba trường <input>
văn bản và một nút gửi.
Ví dụ
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Add Record Form</title>
</head>
<body>
<form action="insert.php" method="post">
<p>
<label for="firstName">First Name:</label>
<input type="text" name="first_name" id="firstName">
</p>
<p>
<label for="lastName">Last Name:</label>
<input type="text" name="last_name" id="lastName">
</p>
<p>
<label for="emailAddress">Email Address:</label>
<input type="text" name="email" id="emailAddress">
</p>
<input type="submit" value="Submit">
</form>
</body>
</html>
Bước 2: Lấy và chèn dữ liệu biểu mẫu
Khi người dùng nhấp vào nút gửi của biểu mẫu HTML thêm bản ghi, trong ví dụ trên, dữ liệu biểu mẫu được gửi đến tệp 'insert.php'. Tệp 'insert.php' kết nối với máy chủ cơ sở dữ liệu MySQL, truy xuất các trường biểu mẫu bằng cách sử dụng biến $_REQUEST
trong PHP và cuối cùng thực hiện truy vấn chèn để thêm các bản ghi. Đây là mã hoàn chỉnh của tệp 'insert.php':
Thủ tục
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$link = mysqli_connect("localhost", "root", "", "demo");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Escape user inputs for security
$first_name = mysqli_real_escape_string($link, $_REQUEST['first_name']);
$last_name = mysqli_real_escape_string($link, $_REQUEST['last_name']);
$email = mysqli_real_escape_string($link, $_REQUEST['email']);
// Attempt insert query execution
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('$first_name', '$last_name', '$email')";
if(mysqli_query($link, $sql)){
echo "Records added successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// Close connection
mysqli_close($link);
?>
Hướng đối tượng
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$mysqli = new mysqli("localhost", "root", "", "demo");
// Check connection
if($mysqli === false){
die("ERROR: Could not connect. " . $mysqli->connect_error);
}
// Escape user inputs for security
$first_name = $mysqli->real_escape_string($_REQUEST['first_name']);
$last_name = $mysqli->real_escape_string($_REQUEST['last_name']);
$email = $mysqli->real_escape_string($_REQUEST['email']);
// Attempt insert query execution
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('$first_name', '$last_name', '$email')";
if($mysqli->query($sql) === true){
echo "Records inserted successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . $mysqli->error;
}
// Close connection
$mysqli->close();
?>
PDO
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
try{
$pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
// Set the PDO error mode to exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("ERROR: Could not connect. " . $e->getMessage());
}
// Attempt insert query execution
try{
// Create prepared statement
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES (:first_name, :last_name, :email)";
$stmt = $pdo->prepare($sql);
// Bind parameters to statement
$stmt->bindParam(':first_name', $_REQUEST['first_name']);
$stmt->bindParam(':last_name', $_REQUEST['last_name']);
$stmt->bindParam(':email', $_REQUEST['email']);
// Execute the prepared statement
$stmt->execute();
echo "Records inserted successfully.";
} catch(PDOException $e){
die("ERROR: Could not able to execute $sql. " . $e->getMessage());
}
// Close connection
unset($pdo);
?>
Trong chương tiếp theo, chúng ta sẽ mở rộng ví dụ truy vấn chèn này và tiến thêm một bước nữa bằng cách triển khai câu lệnh đã chuẩn bị để bảo mật và hiệu suất tốt hơn.
Ghi chú: Hàm mysqli_real_escape_string()
loại bỏ ký tự đặc biệt trong một chuỗi và tạo ra một chuỗi SQL pháp lý để cung cấp bảo mật chống SQL injection .
Đây là ví dụ rất cơ bản về việc chèn dữ liệu biểu mẫu trong bảng cơ sở dữ liệu MySQL. Bạn có thể mở rộng ví dụ này và làm cho nó trở nên tương tác hơn bằng cách thêm các xác nhận vào đầu vào của người dùng trước khi chèn nó vào các bảng cơ sở dữ liệu. Vui lòng xem hướng dẫn về Xác thực biểu mẫu PHPđể tìm hiểu thêm về cách làm sạch và xác thực đầu vào của người dùng bằng PHP.