【问题标题】:LOAD DATA INFILE error in phpphp 中的 LOAD DATA INFILE 错误
【发布时间】:2014-12-27 11:21:00
【问题描述】:

我想将 csv 文件内容导入到数据库表中,我正在使用这段代码,它在将其粘贴到 phpmyadmin 控制台时完美工作:

LOAD DATA LOCAL INFILE '/Applications/MAMP/htdocs/testApp/trips.csv' INTO TABLE trips FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS (type,startDate,endDate,steps,coordinates,distance)

但是,在 php 文件中使用它时,出现错误:

<?php

$host       = "localhost"; //Your database host server
$db         = "dbTest"; //Your database name
$user       = "root"; //Your database user
$pass       = "root"; //Your password
$connection = mysqli_connect($host, $user, $pass);

//Check to see if we can connect to the server
if (!$connection) {
    die("Database server connection failed.");
    die(mysqli_error($db));
} else {
    //Attempt to select the database
    $dbconnect = mysqli_select_db($connection, $db);
    //Check to see if we could select the database
    if (!$dbconnect) {
        die("Unable to connect to the specified database!");
    } else {
        $sql = "LOAD DATA LOCAL INFILE '/Applications/MAMP/htdocs/testApp/trips.csv' 
                INTO TABLE trips
                FIELDS TERMINATED BY ',' 
                LINES TERMINATED BY '\\n' 
               IGNORE 1 ROWS (type,startDate,endDate,steps,coordinates,distance)"
                ;

        $result = mysql_query($sql, $connection);

        if (mysql_affected_rows() == 1) {
            $message = "The trip was successfully inserted!";
        } else {
            $message = "The trip insert failed";
            $message .= mysql_error();
        }

        echo $message;
    }
}
?>

=> The trip insert failed

我很确定问题来自\ 或我无法定位的任何其他角色。 谢谢你的帮助。

【问题讨论】:

  • 你确定你有 \n 作为换行符吗?试试\r\n
  • 检查它在你得到这个错误后查询会加载文件。
  • 如果您想传递反斜杠和“n”而不是换行符,您可能必须转义 \n
  • 为什么要混用mysql和mysqli函数???仔细检查

标签: php mysql load-data-infile


【解决方案1】:

您已经混淆了 MySQL 和 MySQLi 插件——您尝试连接 MySQLi,然后使用 MySQL 执行查询。 你不能那样做。选择一个 API 并始终如一地使用它。

所以:

mysql_query($sql)     ---> $connection->query($sql)
mysql_affected_rows() ---> $result->affected_rows()
mysql_error()         ---> $connection->error

最终,这与LOAD DATA INFILE 无关,您应该使用基本的SELECT 尝试它!我建议阅读文档了解您使用的功能。

【讨论】:

  • 抱歉,我只是在努力完成这项工作,后台开发人员正在休假。无论如何...
【解决方案2】:

编辑:您在同一个脚本中混合了两个插件 MYSQL 和 MYSQLi,下面我使用 mysqli 插件转储了您的代码的剩余部分,因为您的上半部分使用了 mysqli...

注意:你不能那样做。只选择任何一个 API。

    $result = mysqli_query($connection, $sql);

    if (mysqli_affected_rows($connection) >= 1) {
        $message = "The trip was successfully inserted!";
    } else {
        $message = "The trip insert failed";
        $message .= mysqli_error($connection);
    }

【讨论】:

  • 一个好的答案可以解释问题所在,而不仅仅是转储替换代码。
  • @LightnessRacesinOrbit,我已经在 45 分钟前评论了这个答案,你可以在评论部分看到它,这就是为什么我在这里放弃了替换答案......好吧,没关系你的反对票...... .mam,祝你好运
  • 评论不足。评论可以随时删除。评论补充答案,而不是相反。来自 cmets 的有用信息应该整合到答案中。
  • @LightnessRacesinOrbit,好的,我会尝试关注它,妈妈,谢谢您的建议/建议......
  • 亲爱的 Always Sunny,你解决了我的问题,你让我的一天更加阳光!您的替换代码为我赢得了更多时间,不幸的是我不是 php 专家。谢谢。
【解决方案3】:

尝试将您的 trip.csv 文件移动到 datadir - 您可以使用以下命令找到它:SELECT @ @datadir

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    相关资源
    最近更新 更多