簡體   English   中英

通過PHP將CSV導入MYSQL

[英]importing CSV to MYSQL via PHP

我正在將CSV文件導入我的管理區域,我想將文件添加到我的數據庫中。 我對import.php PHP代碼是:

<?php 

include_once('../include/connection.php');

if ($_FILES[csv][size] > 0) {

    //get the csv file
    $file = $_FILES[csv][tmp_name];
    $handle = fopen($file,"r");

    //loop through the csv file and insert into database
    do {
        if ($data[0]) {
             mysql_query("INSERT INTO mobi(promo_title, promo_content, promo_image, promo_link, promo_cat, promo_name) VALUES
                (
                    '".addslashes($data[0])."',
                    '".addslashes($data[1])."',
                    '".addslashes($data[2])."',
                    '".addslashes($data[3])."',
                    '".addslashes($data[4])."',
                    '".addslashes($data[5])."'
                )
            ");
        }
    } while ($data = fgetcsv($handle,1000,",","'"));
    //

    //redirect
    header('Location: import.php?success=1'); die;

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Import a CSV File with PHP & MySQL</title>
</head>

<body>

<?php if (!empty($_GET[success])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?>

<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
  Choose your file: <br />
  <input name="csv" type="file" id="csv" />
  <input type="submit" name="Submit" value="Submit" />
</form>

</body>
</html> 

代碼顯示正確,但是當我選擇我的測試文件並點擊提交時,我遇到了以下問題:

Warning: mysql_query() [function.mysql-query]: Access denied for user 'root'@'localhost' (using password: NO) in admin/import.php on line 23

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in admin/import.php on line 23

Warning: mysql_query() [function.mysql-query]: Access denied for user 'root'@'localhost' (using password: NO) in admin/import.php on line 23

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in admin/import.php on line 23

Warning: mysql_query() [function.mysql-query]: Access denied for user 'root'@'localhost' (using password: NO) in admin/import.php on line 23

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in admin/import.php on line 23

Warning: mysql_query() [function.mysql-query]: Access denied for user 'root'@'localhost' (using password: NO) in admin/import.php on line 23

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in admin/import.php on line 23

Warning: Cannot modify header information - headers already sent by (output started at admin/import.php:1) in admin/import.php on line 29

有人能看出原因嗎?

我的connection.php代碼是這樣的:

<?php

try {
$pdo = new PDO('mysql:host=localhost;dbname=*********', '*********', '*********');
}catch (PDOException $e){
  exit('Database Error.');
}

?>

請注意我的其他頁面,如add.php,delete.php,edit.php等都使用相同的include_once for connection.php

因為我的數據庫連接沒有任何關系。

謝謝。

您正在使用PDO建立數據庫連接。 但是$pdo實例不再使用了!

要執行SQL語句,需要像$pdo->query("INSERT INTO mobi ...")

相反,您正在使用mysql_query發送MySQL查詢。 所以你得到這些警告:

Access denied for user 'root'@'localhost' (using password: NO)

A link to the server could not be established

還要確保在header()函數之前沒有輸出任何字符串等...以刪除此警告: headers already sent

您的數據庫憑據可能有誤。 檢查服務器是否可訪問。

已發送的標題信息是由PHP代碼前的空格引起的

 <?php 

include_once('../include/connection.php');

<?php 

include_once('../include/connection.php');

您的數據庫憑據不正確。 您還應該考慮使用mysqli面向對象的數據庫方法,並且應該使用mysqli_real_escape_string而不是addslashes。 標頭錯誤是由於拋出mysql錯誤並輸出到頁面而導致的。

您是否嘗試使用php加載文件,這樣您就不必循環使用它了?

我建議使用require_once而不是include_once __DIR__在包含路徑前面也總是一件好事。 這樣你可以說出文件來自當前文件的位置,而不是當前運行的腳本。

它看起來像這樣:

<?php
require_once __DIR__ . '/../include/connection.php';

if ($_FILES[csv][size] > 0) {

    //get the csv file
    $file = $_FILES[csv][tmp_name];

    mysql_query("
        LOAD DATA LOW_PRIORITY LOCAL 
        INFILE '$file'
        REPLACE INTO TABLE mobi 
        FIELDS TERMINATED BY ',' 
        OPTIONALLY ENCLOSED BY '\"' 
        ESCAPED BY '\"' 
        LINES TERMINATED BY '\n' 
        (promo_title, promo_content, promo_image, promo_link, promo_cat, promo_name)
        SET promo_name = TRIM(BOTH '\r' FROM promo_name);
    ");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM