Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tập lệnh PHP để nhập dữ liệu csv vào mysql

Một số mẹo:

  • Không sử dụng ext / mysql không dùng nữa , khi bạn có thể sử dụng ext / mysqli hoặc PDO.

  • Không đọc toàn bộ tệp csv thành một biến PHP. Điều gì xảy ra khi tệp có dung lượng 500MB?

  • Không viết mã PHP tùy chỉnh để phân tích cú pháp dữ liệu csv khi bạn có thể sử dụng hàm nội trang fgetcsv () .

  • Không tạo câu lệnh SQL mới cho mọi hàng trong dữ liệu, khi bạn có thể sử dụng tuyên bố chuẩn bị sẵn .

  • Không nội suy dữ liệu từ một tệp bên ngoài vào các câu lệnh SQL. Điều này có nguy cơ Chèn SQL lỗ hổng bảo mật, giống như khi bạn nội suy đầu vào của người dùng không đáng tin cậy.

  • Không phân tích cú pháp và chèn dữ liệu csv từng hàng, khi bạn có thể sử dụng TẢI THÔNG TIN DỮ LIỆU yêu cầu. Nhanh hơn 20 lần so với việc chèn từng hàng một.

Đây là một giải pháp đơn giản hơn:

<?php
$databasehost = "localhost"; 
$databasename = "test"; 
$databasetable = "sample"; 
$databaseusername="test"; 
$databasepassword = ""; 
$fieldseparator = ","; 
$lineseparator = "\n";
$csvfile = "filename.csv";

if(!file_exists($csvfile)) {
    die("File not found. Make sure you specified the correct path.");
}

try {
    $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
        $databaseusername, $databasepassword,
        array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        )
    );
} catch (PDOException $e) {
    die("database connection failed: ".$e->getMessage());
}

$affectedRows = $pdo->exec("
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
      FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
      LINES TERMINATED BY ".$pdo->quote($lineseparator));

echo "Loaded a total of $affectedRows records from this csv file.\n";

?>

Tôi đã thử nghiệm điều này với PHP 5.3.26 trên máy Mac, kết nối với MySQL 5.6.14 trên Linux.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tốt nhất để lưu trữ danh sách có thứ tự trong cơ sở dữ liệu?

  2. Mysql - sử dụng lại các giá trị đã tính toán

  3. php- lấy id chèn cuối cùng

  4. Làm cách nào để tìm mối quan hệ giữa các bảng có liên quan đến khoảng cách dài? MySQL

  5. Tự động tải kết quả tìm nạp các kết quả giống nhau lặp đi lặp lại