Thêm dữ liệu vào MySQL trong PHP

Ở chương trước chúng ta đã tìm hiểu cách kết nối cơ sở dữ liệu MySQL, cách tạo cơ sở dữ liệu và tạo bảng sử dụng MySQLi và PDO trong PHP. Nếu bạn bỏ lỡ bài viết này thì có thể xem tại đây:

Làm việc với MySQL trong PHP | Comdy
MySQL là gì? Làm việc với MySQL trong PHP. Hướng dẫn kết nối, tạo database, tạo bảng MySQL trong PHP.

Ở hướng dẫn này chúng ta sẽ tìm hiểu cách thêm dữ liệu vào MySQL bằng MySQLi và PDO trong PHP.

Thêm dữ liệu vào MySQL bằng MySQLi và PDO

Sau khi tạo cơ sở dữ liệu và các bảng, chúng ta có thể bắt đầu thêm dữ liệu vào chúng.

Dưới đây là một số quy tắc cú pháp để làm theo:

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

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 table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

Để tìm hiểu thêm về MySQL, vui lòng truy cập hướng dẫn MySQL của chúng tôi.

Trong chương trước, chúng tôi đã tạo một bảng trống có tên "MyGuests" với năm cột: "id", "firstname", "lastname", "email" and "reg_date". Bây giờ, chúng ta hãy thêm dữ liệu vào bảng này.

Lưu ý: Nếu một cột là AUTO_INCREMENT (như cột "id") hoặc TIMESTAMP với cập nhật mặc định của current_timesamp (như cột "reg_date") thì không cần phải chỉ định trong câu lệnh INSERT vì MySQL sẽ tự động thêm giá trị.

Các ví dụ sau đây thêm bản ghi mới vào bảng "MyGuests":

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";

if ($conn->query($sql) === TRUE) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>
MySQLi hướng đối tượng
<?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')";

if (mysqli_query($conn, $sql)) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>
MySQLi thủ tục
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $sql = "INSERT INTO MyGuests (firstname, lastname, email)
  VALUES ('John', 'Doe', 'john@example.com')";
  // use exec() because no results are returned
  $conn->exec($sql);
  echo "New record created successfully";
} catch(PDOException $e) {
  echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
?>
PDO

Nhận ID của Bản ghi được chèn cuối cùng

Nếu chúng tôi thực hiện INSERT hoặc UPDATE trên một bảng với trường AUTO_INCREMENT, chúng tôi có thể nhận được ID của bản ghi được thêm / cập nhật gần đây ngay lập tức.

Trong bảng "MyGuests", cột "id" là trường AUTO_INCREMENT:

CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

Các ví dụ sau đây giống như các ví dụ ở phần trước ngoại trừ việc chúng tôi đã thêm mã để truy xuất ID của bản ghi được chèn cuối cùng và in ra ID được thêm cuối cùng:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";

if ($conn->query($sql) === TRUE) {
  $last_id = $conn->insert_id;
  echo "New record created successfully. Last inserted ID is: " . $last_id;
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>
MySQLi hướng đối tượng
<?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')";

if (mysqli_query($conn, $sql)) {
  $last_id = mysqli_insert_id($conn);
  echo "New record created successfully. Last inserted ID is: " . $last_id;
} else {
  echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>
MySQLi thủ tục
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $sql = "INSERT INTO MyGuests (firstname, lastname, email)
  VALUES ('John', 'Doe', 'john@example.com')";
  // use exec() because no results are returned
  $conn->exec($sql);
  $last_id = $conn->lastInsertId();
  echo "New record created successfully. Last inserted ID is: " . $last_id;
} catch(PDOException $e) {
  echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
?>
PDO

Chèn nhiều bản ghi vào MySQL bằng MySQLi và PDO

Sẽ có lúc bạn sẽ 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ẽ làm giảm hiệu năng của hệ thống.

Có một cách để giải quyết trường hợp này đó là thực thi nhiều câu lệnh SQL trong một lần gọi cơ sở dữ liệu.

Các ví dụ sau đây sẽ thêm ba bản ghi mới vào bảng "MyGuests":

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->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 ($conn->multi_query($sql) === TRUE) {
  echo "New records created successfully";
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>
MySQLi hướng đối tượng
Lưu ý: mỗi câu lệnh SQL phải được phân tách bằng dấu chấm phẩy.
<?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);
?>
MySQLi thủ tục

Cách PDO hơi khác một chút, nó sử dụng transaction để commit các câu lệnh INSERT:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  // begin the transaction
  $conn->beginTransaction();
  // our SQL statements
  $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
  VALUES ('John', 'Doe', 'john@example.com')");
  $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
  VALUES ('Mary', 'Moe', 'mary@example.com')");
  $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
  VALUES ('Julie', 'Dooley', 'julie@example.com')");

  // commit the transaction
  $conn->commit();
  echo "New records created successfully";
} catch(PDOException $e) {
  // roll back the transaction if something failed
  $conn->rollback();
  echo "Error: " . $e->getMessage();
}

$conn = null;
?>
PDO
Lập Trình PHP
Bài Viết Liên Quan:
Hướng dẫn lập trình PHP toàn tập
Trung Nguyen 08/05/2020
Hướng dẫn lập trình PHP toàn tập

Hướng dẫn lập trình PHP toàn tập sẽ giúp bạn từng bước tìm hiểu và nắm vững ngôn ngữ lập trình PHP.

Truy xuất dữ liệu MySQL trong PHP
Trung Nguyen 07/05/2020
Truy xuất dữ liệu MySQL trong PHP

Hướng dẫn cách truy xuất, lọc, sắp xếp dữ liệu MySQL trong PHP sử dụng MySQLi và PDO.

MySQL prepared statements trong PHP
Trung Nguyen 07/05/2020
MySQL prepared statements trong PHP

MySQL prepared statements trong PHP rất hữu ích để chống lại các cuộc tấn công SQL Injection.

Làm việc với MySQL trong PHP
Trung Nguyen 06/05/2020
Làm việc với MySQL trong PHP

MySQL là gì? Làm việc với MySQL trong PHP. Hướng dẫn kết nối, tạo database, tạo bảng MySQL trong PHP.