Cách Insert MySQL nhiều dòng 1 lúc bằng PHP

Cách Insert MySQL nhiều dòng 1 lúc bằng PHP là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Cách Insert MySQL nhiều dòng 1 lúc bằng PHP sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và PHP nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Lúc học MySQL ta có thể chạy nhiều câu truy vấn cùng lúc bằng cách viết trong PHPMYADMIN hoặc một editor nào đó như SQLYog. Phần mềm thì mình không bàn tới nhưng với PHPMYADMIN thực chất nó cũng là một ứng dụng web nên nó chạy multi query được thì mình cũng có thể làm được.

1. Insert nhiều record vào MySQL bằng PHP

Trong thư viện MySQLi hỗ trợ hai hàm dùng để thực hiện nhiều câu lệnh truy vấn đó là hàm mysqli_multi_query() đối với trường hợp dùng Procedural và phương thức multi_query() đối với trường hợp dùng Object-oriented.

Riêng đối với PDO thì ta phải thực hiện khác chút xíu đó là phải hợp transaction và mỗi lần mỗi câu truy vấn chứ không phải là chạy cùng lúc.

Dùng MySQLi Object-oriented:

// Kết nối
$conn = new mysqli('localhost', 'root', 'vertrigo', 'hoidapcode');
 
// Kiểm tra kết nối
if ($conn->connect_error) {
    die("Kết nối thất bại: " . $conn->connect_error);
} 
 
// Câu lệnh SQL
$sql = "INSERT INTO News (title, content) 
        VALUES ('tieu de 1', 'noi dung 1');";
$sql .= "INSERT INTO News (title, content) 
        VALUES ('tieu de 2', 'noi dung 2');";
 
// Thực thi câu lệnh
if ($conn->multi_query($sql) === TRUE) {
    echo "Thêm thành công";
} else {
    echo "Lỗi: " . $sql . "<br>" . $conn->error;
}
 
// Ngắt kết nối
$conn->close();

Bạn lưu ý là vì chúng ta đang thực hiện nhiều câu SQL trong cùng một tài liệu neen cuối mỗi lệnh SQL phải có dấu chấm phẩy nhé ;.

Dùng MySQLi Procedural:

// Kết nối
$conn = mysqli_connect('localhost', 'root', 'vertrigo', 'hoidapcode');
 
// Kiểm tra kết nối
if (!$conn) {
    die("Kết nối thất bại: " . mysqli_connect_error());
}
 
// Câu lệnh SQL
$sql = "INSERT INTO News (title, content) 
        VALUES ('tieu de 1', 'noi dung 1');";
$sql .= "INSERT INTO News (title, content) 
        VALUES ('tieu de 2', 'noi dung 2');";
 
// Thực thi câu lệnh
if (mysqli_multi_query($conn, $sql)) {
    echo "Thêm thành công";
} else {
    echo "Lỗi: " . $sql . "<br>" . mysqli_error($conn);
}
 
// Ngắt kết nối
mysqli_close($conn); 

Tương tự như phần lưu ý trên, cuối mỗi câu SQL bạn phải có dấu chấm phẩy.

Dùng PDO:

Khi chúng ta insert nhiều câu truy vấn cùng lúc thì thường bị lỗi có một câu truy vấn nào đó sai cú pháp hoặc bị lỗi thì nó sẽ dừng lại toàn bộ, lúc này những câu SQL đã xử lý sẽ không thể phục hồi được. Ví dụ khi bạn viết chứ năng rút tiền trong thẻ ATM, người dùng đưa thẻ vào và rút tiền, máy ATM sẽ kiêm tra là còn tiền không? Nếu còn thì cập nhật trạng thái là đã rút tiền và trả tiền cho người dùng. Nhưng giả sử mới kiểm tra và câp nhật trạng thái là đã rút tiền nhưng chưa trả tiền thì hệ thống bị lỗi, người dùng chưa nhận được tiền nên sẽ dẫn đến không đồng bộ. Những trường hợp thế này rất là nguy hiểm nên các hệ quản trị CSDL đưa ra khái niệm transaction, với transaction thì chỉ cần một thao tác bị lỗi là lập tức nó sẽ rollback lại toàn bộ trạng thái ban đầu.

try {
    // Kết nối
    $conn = new PDO("mysql:host=localhost;dbname=hoidapcode", 'root', 'vertrigo');
    // Thiết lập exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
    // Bắt đầu transaction
    $conn->beginTransaction();
     
    // Thực thi từng câu truy vấn
    $conn->exec("INSERT INTO News (title, content) 
        VALUES ('tieu de 1', 'noi dung 1')");
    $conn->exec("INSERT INTO News (title, content) 
        VALUES ('tieu de 2', 'noi dung 2')");
 
    // Nếu mọi thứ thành công thì commit
    $conn->commit();
     
    echo "Thao tác thành công";
} 
catch (PDOException $e) {
    // Nếu xuất hiện lỗi thì rollback lại các thao tác
    $conn->rollback();
    echo "Lỗi: " . $e->getMessage();
}
 
 
// Ngắt kết nối
$conn = null;

2. Lời kết

Trong bài này mình có nói sơ lược về transaction nên nếu bạn chưa biết về transaction thì sẽ hơi khó. Hiện tại trên Hoidapcode.com chưa có tutorials về transaction, vì vậy sau này mình sẽ viết về vấn đề này để các bạn nắm rõ hơn. Bài tiếp theo chúng ta sẽ tìm hiểu cơ chế prepared của hai thư viện MySQLi và PDO.

Hy vọng với bài viết về Cách Insert MySQL nhiều dòng 1 lúc bằng PHP đã giải đáp giúp bạn phần nào về kiến thức lập trình PHP. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!