【问题标题】:importing CSV to MYSQL via PHP通过 PHP 将 CSV 导入 MYSQL
【发布时间】:2013-08-30 11:47:19
【问题描述】:

我正在将一个 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

所以我的数据库连接没有问题。

谢谢。

【问题讨论】:

  • 检查您的connection.php 以正确建立数据库。
  • 嗨。对于我的连接我使用这个:try { $pdo = new PDO 这需要反映在上面的代码中吗?
  • 您的数据库似乎有一个password,而您将其留空。
  • 我在哪里留空了?我怎么把它留空了。你能指出来吗?我的管理员中的所有其他文件都使用相同的包含代码连接到此文件,所以当它正在读取同一页面时,我该如何处理这个问题。
  • 请阅读我更新的帖子

标签: php mysql csv content-management-system


【解决方案1】:

您是否尝试过使用 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);
    ");
}

【讨论】:

    【解决方案2】:

    您正在使用PDO 建立数据库连接。但是$pdo 实例不再使用了!

    要执行SQL语句,需要使用$pdo-&gt;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

    【讨论】:

    • 好的,所以我用 $pdo->query 更改了 mysql_query。它消除了所有第一个问题,但不是关于标题的最后一个问题。
    • 确保&lt;?php 代码顶部之前没有任何空格。如果存在删除它。
    • Vahid Hallaji - 非常感谢。这很好用。再次感谢您。
    【解决方案3】:

    您的数据库凭据不正确。您还应该考虑使用mysqli 面向对象的数据库方法,并且应该使用mysqli_real_escape_string 而不是addlashes。标头错误是mysql错误被抛出并输出到页面的结果。

    【讨论】:

    • 嗨。对于我的连接我使用这个:try { $pdo = new PDO 这需要反映在上面的代码中吗?
    • 使用 PDO,您需要执行$pdo-&gt;query(YOURQUERY); 之类的操作,但您仍应检查用于开始连接的凭据。
    • 像我的 add.php 页面这样的所有其他页面都使用相同的包含页面。
    【解决方案4】:

    您的数据库凭据可能有误。 检查服务器是否可访问。

    而且已经发送的header信息是你的php代码前的空格造成的

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

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

    【讨论】:

    • Na.. 之前有一个额外的空格
    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2011-09-30
    相关资源
    最近更新 更多