【问题标题】:MySQLi CSV Load Data Infile to MySQL (Certain columns in CSV, certain columns in MySQL)MySQLi CSV 将数据 Infile 加载到 MySQL(CSV 中的某些列,MySQL 中的某些列)
【发布时间】:2013-08-16 13:24:52
【问题描述】:

上周我在这方面搜索了一些东西,但我没有找到任何工作,我查看了文档,文档中的任何内容也没有工作。

我有一个 CSV(以下链接可下载),我只需使用 MySQLi 将几列上传到 MySQL。 CSV来自我们用于投放广告的平台,客户名称已更改,但数据均为两天的真实数据。

这是我上传的代码(有 3 个不同版本的 SQL 命令,我尝试了大约 30 个不同的版本):

<? 
(MY USER INFORMATION FOR MY MYSQL SERVER)
$ad_results = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName);
ignore_user_abort(true);
set_time_limit(9999);

$sql1 =  "LOAD DATA INFILE 'CSV_FILE_FOR_STACKOVERFLOW.csv' INTO TABLE ad_info
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  
(@col1,@col2,@col6,@col12,@col13,@col14) set client=@col2,impressions_delivered=@col12,date=@col1,impressions_booked=@col13,clicks=@col14,creative=@col6";

$sql2 = "LOAD XML INFILE '558385_20130815-153744.xml' INTO TABLE item ROWS IDENTIFIED BY '<row>'";

$sql3 = "LOAD DATA INFILE 'CSV_FILE_FOR_STACKOVERFLOW.csv' INTO TABLE ad_info
        FIELDS TERMINATED BY ','
        LINES TERMINATED BY '\n'
        IGNORE 1 LINES
        (@client, @name)
        set
          client = @client,
          impressions_delivered = @impressions_delivered,
          company_id = '1000001'";
mysqli_query($ad_results, $sql3);`
mysqli_close($ad_results)
?>

MySQL 数据库设置了 CSV 中的所有列,以防万一不能只做某些列,我愿意上传所有数据。有趣的是每天凌晨 1 点会有 30-40 个 CSV 文件通过此代码,我有选择下载文件夹中所有 CSV 的代码,只需将代码插入 MySQL。谢谢! (请用真实的答案回复,我到处搜索,但没有找到任何工作,它总是给我一个错误,或者只是没有将行插入 MySQL,我得到的最接近的是解析 CSV 并使用

mysqli_query($ad_results, "INSERT INTO ad_info (...)VALUES(...)");

该文件位于服务器上,cron 作业确实每晚运行 PHP 脚本,它忽略了用户中止,运行时间为 9999 秒。 (以确保它获取所有数据)。提前感谢您的帮助!

CSV 文件:http://ad-results.com/CSV_FILE_FOR_STACKOVERFLOW.csv

【问题讨论】:

  • 您是否实际发布了指向 CSV 文件的链接?
  • 刚做了,发现我没有链接。 :)
  • 很抱歉,问题到底出在哪里?导入失败?错误或未插入数据?是否有任何警告 (SHOW WARNINGS)?
  • 查看数据我注意到您使用的是美国日期格式8/13/13,这可能会导致问题......我还没有测试过。
  • 有谁知道从哪里 LOAD DATA INFILE 获取文件?是否有必须使用的默认目录?

标签: php mysql csv mysqli mysqlimport


【解决方案1】:

我在您的代码中找不到mysqli_error($ad_results) 调用。您应该将 mysqli_query() 的响应保存在资源变量 $mysqli 中,然后显示可能的 MySQL 错误,例如:

$mysqli=mysqli_query($ad_results, $sql3);
if (!$mysqli) echo mysqli_error($ad_results);

也许毕竟有一条消息在等着你? ;-)

【讨论】:

  • 现在我遇到了和你一样的问题。好的,更近一步!我把文件夹改成777,没区别,是登录错误,看不懂。
  • 我已联系我的主机授予我访问 MySQL 服务器上 FILE 的权限。希望它能解决问题!谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 2018-09-19
  • 2011-03-15
  • 2014-07-04
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
相关资源
最近更新 更多