Lệnh INSERT trong MySQL & PHP

Lệnh INSERT trong MySQL & PHP

Trong bài Hướng dẫn tự học PHP này, bạn sẽ được tìm hiểu cách chèn các bản ghi trong bảng MySQL bằng PHP với lệnh INSERT.

Chèn dữ liệu vào bảng cơ sở dữ liệu MySQL

Qua 2 bài trước, bạn đã hiểu cách tạo cơ sở dữ liệucách tạo bảng trong MySQL. Trong hướng dẫn này, bạn sẽ tìm hiểu cách thực hiện truy vấn SQL để chèn các bản ghi vào bảng.

Câu lệnh INSERT INTO sẽ được sử dụng để chèn các hàng mới trong bảng cơ sở dữ liệu mà chúng ta đã tạo.

Hướng dẫn chèn dữ liệu trong bảng CSDL bằng lệnh INSERT trong MySQL & PHP
Hướng dẫn chèn dữ liệu trong bảng CSDL bằng lệnh INSERT trong MySQL & PHP

Chúng ta 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ị phù 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() của PHP để chèn dữ liệu vào bảng.

Dưới đây là một ví dụ, chèn một hàng mới vào bảng person bằng cách chỉ định các giá trị cho các trường First_name, last_nameemail.

3 Cách chèn dữ liệu vào bảng cơ sở dữ liệu sử dụng MySQLi hướng thủ tục, MySQLi OOP và PDO

Ví dụ 1: Chèn dữ liệu bằng cách sử dụng MySQLi hướng thủ tục

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
 
// Cố gắng thực thi câu lệnh insert
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";
if(mysqli_query($link, $sql)){
    echo "Thêm bản ghi thành công.";
} else{
    echo "ERROR: Không thể thực thi $sql. " . mysqli_error($link);
}
 
// Đóng kết nối
mysqli_close($link);
?>

Ví dụ 2: Chèn dữ liệu bằng cách sử dụng MySQLi hướng đối tượng

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu) */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
 
// Cố gắng thực thi câu lệnh insert
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";
if($mysqli->query($sql) === true){
    echo "Thêm bản ghi thành công.";
} else{
    echo "ERROR: Không thể thực thi $sql. " . $mysqli->error;
}
 
// Đóng kết nối
$mysqli->close();
?>

Ví dụ 3: Chèn dữ liệu bằng cách sử dụng PDO

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    // Thiết lập PDO erorr thành Ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
}
 
// Cố gắng thực thi câu lệnh insert
try{
    $sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";    
    $pdo->exec($sql);
    echo "Thêm bản ghi thành công.";
} catch(PDOException $e){
    die("ERROR: Không thể thực thi $sql. " . $e->getMessage());
}
 
// Đóng kết nôi
unset($pdo);
?>

Nếu bạn nhớ từ bài trước, trường id được đánh dấu là AUTO_INCREMENT. Nó yêu cầu MySQL tự động gán 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.

3 Cách chèn nhiều hàng vào một bảng trong MySQL với PHP

Bạn cũng có thể chèn nhiều hàng vào một bảng CSDL MySQL với một truy vấn chèn cùng một lúc.

Để thực hiện việc này, trong câu lệnh INSERT INTO chúng ta chỉ cần thêm nhiều giá trị cùng một lúc, trong đó các giá trị của từng 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 vài hàng vào bảng person, như ví dụ sau:

Ví dụ 4: Chèn nhiều hàng vào một bảng CSDL sử dụng MySQLi hướng thủ tục

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
 
// Cố gắng thực thi câu lệnh insert
$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 "Thêm bản ghi thành công.";
} else{
    echo "ERROR: Không thể thực thi $sql. " . mysqli_error($link);
}
 
// Đóng kết nối
mysqli_close($link);
?>

Như bạn thấy, chúng ta chỉ cần thay đổi câu lệnh INSERT INTO đi một chút.

Ví dụ 5: Chèn nhiều hàng vào một bảng CSDL sử dụng MySQLi hướng đối tượng

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu) */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
 
// Cố gắng thực thi câu lệnh insert
$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 "Thêm bản ghi thành công.";
} else{
    echo "ERROR: Không thể thực thi $sql. " . $mysqli->error;
}
 
// Đóng kết nối
$mysqli->close();
?>

Ví dụ 5: Chèn nhiều hàng vào một bảng CSDL sử dụng PDO

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    // Thiết lập PDO erorr thành Ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
}
 
// Cố gắng thực thi câu lệnh insert
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 "Thêm bản ghi thành công.";
} catch(PDOException $e){
    die("ERROR: Không thể thực thi $sql. " . $e->getMessage());
}
 
// Đóng kết nôi
unset($pdo);
?>

Bây giờ, hãy truy cập phpMyAdmin (http://localhost/phpmyadmin/) và kiểm tra dữ liệu bảng người trong cơ sở dữ liệu demo. Bạn sẽ tìm 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.

Lưu ý: Bất kỳ số lần ngắt dòng nào cũng có thể xảy ra trong một câu lệnh SQL, với điều kiện là bất kỳ ngắt dòng nào sẽ không phá vỡ các từ khóa, giá trị, biểu thức, v.v.

Hướng dẫn chèn dữ liệu vào một bảng CSDL từ một form 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ừ tập lệnh PHP. Bây giờ, chúng ta sẽ xem làm thế nào chúng ta có thể chèn dữ liệu vào cơ sở dữ liệu thu được từ một biểu mẫu HTML.

Thực tế, khi lập trình web, để tiện cho việc quản trị website, người quản trị sẽ chỉ làm việc trên các giao diện trực quan chứ không phải thao tác code.

Do đó, để có thể thêm dữ liệu vào bảng, người quản trị web sẽ nhập từ form HTML.

Việc của lập trình viên web chúng ta là,

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 person.

Bước 1: Tạo một form HTML

Đây là một biểu mẫu HTML đơn giản có ba trường nhập văn bản <input> và nút gửi.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form thêm bản ghi</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 dữ liệu và chèn dữ liệu vào bảng CSDL

Khi người dùng nhấp vào nút gửi của Form 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’ thông qua phương thức POST trong PHP.

Tệp ‘insert.php‘ sẽ thực hiện kết nối với máy chủ cơ sở dữ liệu MySQL. Chúng ta lấy dữ liệu của các trường bằng biến $_REQUEST của 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’ của chúng ta:

Mã Lấy dữ liệu và Chèn dữ liệu sử dụng MySQLi hướng thủ tục

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
 
// Làm sạch dữ liệu đầu vào để đảm bảo an toàn
$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']);
 
// Cố gắng thực thi câu lệnh insert
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('$first_name', '$last_name', '$email')";
if(mysqli_query($link, $sql)){
    echo "Thêm bản ghi thành công.";
} else{
    echo "ERROR: Không thể thực thi $sql. " . mysqli_error($link);
}
 
// Close connection
mysqli_close($link);
?>

Mã Lấy dữ liệu và Chèn dữ liệu sử dụng MySQLi hướng đối tượng

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu) */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
 
// Làm sạch dữ liệu đầu vào để đảm bảo an toàn
$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']);
 
// Cố gắng thực thi câu lệnh insert
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('$first_name', '$last_name', '$email')";
if($mysqli->query($sql) === true){
    echo "Thêm bản ghi thành công.";
} else{
    echo "ERROR: Không thể thực thi $sql. " . $mysqli->error;
}
 
// Đóng kết nối
$mysqli->close();
?>

Mã Lấy dữ liệu và Chèn dữ liệu sử dụng PDO

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    // Thiết lập PDO erorr thành Ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
}
 
// Cố gắng thực thi câu lệnh insert
try{
    // Chuẩn bị câu lệnh sql
    $sql = "INSERT INTO persons (first_name, last_name, email) VALUES (:first_name, :last_name, :email)";
    $stmt = $pdo->prepare($sql);
    
    // Các tham số ràng buộc
    $stmt->bindParam(':first_name', $_REQUEST['first_name']);
    $stmt->bindParam(':last_name', $_REQUEST['last_name']);
    $stmt->bindParam(':email', $_REQUEST['email']);
    
    // Thực thi câu lệnh đã chuẩn bị
    $stmt->execute();
    echo "Thêm bản ghi thành công.";
} catch(PDOException $e){
    die("ERROR: Không thể thực thi $sql. " . $e->getMessage());
}
 
// Đóng kết nối
unset($pdo);
?>

Trong bài 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 bằng cách triển khai câu lệnh đã chuẩn bị để bảo mật hiệu suất tốt hơn.

Lưu ý: Hàm mysqli_real_escape_string() được sử dụng để loại bỏ các ký tự đặc biệt trong một chuỗi người dùng / quản trị viên nhập vào và tạo một chuỗi SQL hợp lệ để tránh khỏi vấn đề SQL injection.

Bạn đã hiểu cách chèn dữ liệu vào bảng CSLD MySQL bằng PHP chưa?

Đây là ví dụ rất cơ bản về việc chèn dữ liệu biểu mẫu vào bảng cơ sở dữ liệu MySQL. Bạn có thể mở rộng ví dụ này và làm cho nó tương tác hơn bằng cách xác thực dữ liệu 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 bài Hướng dẫn validate form để tìm hiểu thêm về cách làm sạch và xác thực các dữ liệu đầu vào của người dùng bằng PHP.

PHPDev

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *