PHP VÀ MYSQL
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Bài 07: Insert nhiều record vào MySQL bằng PHP

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.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thứ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', 'FreetutsDemo');

// 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();fdas

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é ;.

Bài viết này được đăng tại [free tuts .net]

Dùng MySQLi Procedural:

// Kết nối
$conn = mysqli_connect('localhost', 'root', 'vertrigo', 'FreetutsDemo');

// 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=FreetutsDemo", '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 freetuts.net 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.

Danh sách file tải về

Tên file tải về Pass giải nén
Tải bài học định dạng PDF freetuts.net hoặc gameportable.net

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top