1. Một số nguyên tắc cần tuân thủ khi chèn dữ liệu

Sau khi CSDL đã được tạo ta có thể thêm dữ liệu vào chúng. Nhưng trước hết thì ta cần tuân theo một số nguyên tắc sau:

  • Truy vấn SQL phải được đặt trong cặp dấu nháy kép trong PHP.
  • Các giá trị chuỗi bên trong truy vấn SQL phải được đặt trong cặp dáu nháy đơn.
  • Các giá trị số không được đặt trong cặp dấu nháy đơn.
  • Giá trị NULL không được đặt trong cặp dấu nháy đơn.

2. Lệnh insert dữ liệu trong MySQL bằng PHP

Đối với MySQL để insert dữ liệu vào table thì ta sẽ sử dụng lệnh Insert, như với PHP ta cũng sử dụng lệnh đó để đưa dữ liệu vào trong MySQL. Câu lệnh INSERT INTO được sử dụng để thêm các bản ghi mới vào bảng MySQL:

INSERT INTO tbl_news (title, content) 
VALUES ('tieu de', 'noi dung');

Lưu ý

Nếu một cột là AUTO_INCREMENT (như cột “id”) hoặc TIMESTAMP với bản cập nhật mặc định của current_timesamp (như cột “reg_date”), thì nó không cần được chỉ định trong truy vấn SQL; MySQL sẽ tự động thêm giá trị.

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.

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

Với cách này các bạn chỉ cần dùng hàm mysqli_query để thực hiện các câu truy vấn với cú pháp sử dụng như sau:

mysqli_query(connect, query);

Trong đó: connect là biến kết nối PHP với MySql, còn query là câu truy vấn SQL.

Ví dụ:

// khởi tạo kết nối
$connect = mysqli_connect('localhost', 'root', '', 'db_lttd');
//Kiểm tra kết nối
if (!$connect) {
    die('kết nối không thành công ' . mysqli_connect_error());
}
//câu truy vấn
$sql = "INSERT INTO tbl_news (title, content) 
VALUES ('tieu de', 'noi dung')";
//kiểm tra
if (mysqli_query($connect, $sql))
    //Thông báo nếu thành công
    echo 'Thêm thành công';
else
    //Hiện thông báo khi không thành công
    echo 'Không thành công. Lỗi' . mysqli_error($connect);
//ngắt kết nối
mysqli_close($connect);

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

Với cách này chúng ta chỉ cần gọi phương thức query của class mysqli để thực hiện truy vấn.

Ví dụ:

// khởi tạo kết nối
$connect = new mysqli('localhost', 'root', '', 'db_lttd');
//Kiểm tra kết nối
if ($connect->connect_error) {
    die('kết nối không thành công ' . $connect->connect_error);
}
//câu truy vấn
$sql = "INSERT INTO tbl_news (title, content) 
VALUES ('tieu de', 'noi dung')";
//kiểm tra
if ($connect->query($sql) === TRUE)
    //Thông báo nếu thành công
    echo 'Thêm thành công';
else
    //Hiện thông báo khi không thành công
    echo 'Không thành công. Lỗi' . $connect->error;
//ngắt kết nối
$connect->close();

5. Chèn dữ liệu bằng cách sử dụng PDO

Để thêm dữ liệu với PDO các bạn chỉ cần gọi phương thức exec trong class PDO.

Ví dụ:

try {
    // khởi tạo kết nối
    $connect = new PDO('mysql:host=localhost;dbname=db_lttd', 'root', '');
    $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //Câu truy vấn
    $sql = "INSERT INTO tbl_news (title, content) VALUES ('tieu de', 'noi dung')";
    //thực hiện truy vấn
    $connect->exec($sql);
    echo 'Thành công';
} catch (PDOException $e) {
    //thất bại
    die($e->getMessage());
}

6. Chèn nhiều bản ghi vào MySQL

Sẽ có lúc bạn phải thực thi nhiều câu lệnh SQL, tuy nhiên nếu bạn thực thi lần lượt từng câu lệnh sẽ rất mất thời gian và làm giảm hiệu năng của hệ thống. Vì vậy mà có một cách để giải quyết vấn đề này là thực thi nhiều câu lệnh SQL trong một lần gọi CSDL:

6.1. Sử dụng MySQLi hướng thủ tục

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";
if (mysqli_multi_query($conn, $sql)) {
  echo "New records created successfully";
} else {
  echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>

6.2. Sử dụng MySQLi hướng đối tượng

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "db_lttd";
// Tạo kết nối
$conn = new mysqli($servername, $username, $password, $db_lttd);
// Kiểm tra kết nối
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Thành', 'Nguyễn', 'thanh@gmail.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Nam', 'Chu', 'nam@gmail.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Sơn', 'Phùng', 'son@gmail.com')";
if ($conn->multi_query($sql) === TRUE) {
  echo " Các bản ghi mới đã được tạo thành công ";
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>

6.3. Sử dụng PDO

Việc sử dụng PDO có hơi khác một chút là nó sẽ sử dụng transaction để comit các câu lệnh insert

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "db_lttd";
try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // đặt chế độ lỗi PDO thành ngoại lệ
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // bắt đầu giao dịch
  $conn->beginTransaction();
  // câu lệnh SQL của chúng tôi
  $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
  VALUES ('Thành', 'Nguyễn', 'thanh@gmail.com')");
  $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
  VALUES ('Nam', 'Chu', 'nam@gmail.com')");
  $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
  VALUES ('Sơn', 'Phùng', 'son@gmail.com')");
  // cam kết giao dịch
  $conn->commit();
  echo " Các bản ghi mới đã được tạo thành công ";
} catch(PDOException $e) {
  // quay trở lại giao dịch nếu điều gì đó không thành công
  $conn->rollback();
  echo "Error: " . $e->getMessage();
}
$conn = null;
?>

7. 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 CSDL 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 CSDL 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à sẽ 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.

Việc đầu tiên chính là phải tạo một form HTML. Mình sẽ tạo một form HTML đơn giản có 3 trường nhập văn bản 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>

Sau khi đã có một form HTML đơn giản như ở trên thì ta sẽ dùng mã PHP để lấy sử lý và chèn dữ liệu vào 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.

7.1. Lấy và chèn dữ liệu bằ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);
?>

7.2. Lấy và chèn dữ liệu bằ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();
?>

7.3. Lấy và chèn dữ liệu bằ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);
?>