PHP set_local_infile_handler

Giới thiệu về `set_local_infile_handler` trong PHP

Hàm `set_local_infile_handler` trong PHP được sử dụng để thiết lập một hàm xử lý tùy chỉnh cho các tệp được tải lên từ máy chủ đến cơ sở dữ liệu MySQL khi sử dụng lệnh `LOAD DATA LOCAL INFILE`. Điều này cho phép lập trình viên điều khiển cách mà dữ liệu được đọc từ các tệp, trước khi nó được chèn vào cơ sở dữ liệu.

Cú pháp

mysqli_options($mysqli, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_set_local_infile_handler($mysqli, $handler);

Tham số

- $mysqli: Đối tượng mysqli kết nối đến cơ sở dữ liệu MySQL.
- $handler: Hàm xử lý tùy chỉnh để xử lý các tệp được tải lên.

Ví dụ sử dụng

Dưới đây là một ví dụ đơn giản để minh họa cách sử dụng `set_local_infile_handler`:

$mysqli = new mysqli("localhost", "user", "password", "database");

// Thiết lập option LOCAL INFILE
mysqli_options($mysqli, MYSQLI_OPT_LOCAL_INFILE, true);

// Định nghĩa hàm xử lý
function local_infile_handler($file)
{
    // Mở tệp và thực hiện xử lý dữ liệu
    if (($handle = fopen($file, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            // Xử lý dữ liệu ở đây
        }
        fclose($handle);
    }
    return 0; // Trả về 0 để tiếp tục
}

// Thiết lập hàm xử lý
mysqli_set_local_infile_handler($mysqli, "local_infile_handler");

// Thực thi câu lệnh SQL với LOAD DATA LOCAL INFILE
$sql = "LOAD DATA LOCAL INFILE 'filepath.csv' INTO TABLE tablename FIELDS TERMINATED BY ','";
$mysqli->query($sql);

Lưu ý

Khi sử dụng `LOAD DATA LOCAL INFILE`, bạn cần đảm bảo rằng tùy chọn này được kích hoạt trong cấu hình của MySQL server. Nếu không, bạn có thể gặp lỗi liên quan đến quyền truy cập tệp.

Hàm `set_local_infile_handler` là một công cụ mạnh để xử lý dữ liệu trong các ứng dụng web xây dựng trên PHP, giúp tối ưu hóa cách xử lý tệp tải lên cho cơ sở dữ liệu.