【问题标题】:MySQL - Imporst csv file into existing databaseMySQL - 将 csv 文件导入现有数据库
【发布时间】:2021-09-16 11:44:28
【问题描述】:

我有一个 csv 文件需要上传到现有的 MySQL 数据库。 csv 文件位于主机上,并且没有标题行。这只是表格的数据。我可以在 phpMyAdmin 仪表板中导入 csv 文件,所以我知道 csv 文件可以毫无问题地导入。我需要使用命令行或脚本来完成它,这样我就可以使用 cron 作业来自动化它。我花了很多很多时间试图让它与多种方法一起工作。我试过了:

PHP 脚本:

<?php
$sql = "LOAD DATA INFILE '/home/dir/dir2/file.csv'
INTO TABLE Table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\r'
(col1, col2, col3, etc.) ";

$con = mysqli_connect("hostname","username","password","database");

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

mysqli_close($con);
?>

mysqlimport 命令:

mysqlimport -hhostname -uusername -ppassword database file.csv

mysql 命令:

mysql -hhostname -uusername -ppassword database -e "LOAD DATA INFILE 'file.csv'  INTO TABLE Table  FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"

没有一个有效。我对所有方法都得到了同样的错误。

ERROR 1045 (28000) at line 1: Access denied for user 'username'@'XXX.XXX.XXX.X/XXX.XXX.XXX.X' (using password: YES)

主机名、用户名、密码和数据库名称正确。我可以和他们一起登录 phpMyAdmin。我还在其他 php 脚本中使用它们来搜索数据,它们工作正常。

我已经和我的主人聊天,他们说上面的选项应该可以工作。我已经黔驴技穷了。任何帮助都将非常感谢帮助我了解如何解决我的问题。提前非常感谢!

【问题讨论】:

  • 它为您的 IP 显示 'XXX.XXX.XXX.X/XXX.XXX.XXX.X' 多么奇怪。除非您添加了该部分,否则它应该只列出 1 个,而不是两个?
  • @aynber 服务器显示被选为与客户端匹配的用户。查看 USER() 和 CURRENT_USER() 之间的区别。如果帐户是使用 IP 范围模式创建的,则会显示该帐户。这是常态。
  • 我没有添加第二部分。我只是将数字更改为X。我认为第二部分是主机的子网掩码。 MySQL 在付费托管解决方案上运行。
  • 你能用 CLI 使用'username' 连接到服务器吗(在错误消息中报告,当然没有主机部分)?没有-e 命令行选项。如果为真,则执行并尝试执行 LOAD DATA - 是否成功执行?
  • @Akina 刚试过。不,如果不指定主机名,我将无法连接。(这类似于 phpMyAdmin 喜欢的屏幕,您也需要主机名。)我收到错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket' /var/run/mysqld/mysqld.sock' (2)

标签: php mysql csv


【解决方案1】:

据我所知,我这样做是您可以做到的方法之一:

LOAD DATA INFILE 'YourDiskName:\\SomeFolder\\fileName.csv' INO TABLE your_database_name.table_name

FIELDS ENCLOSED BY '"' TERMINATED BY ',' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'

(Enclose fields iva ") , (Terminate fields by , ) , (Escape them vai \ )

这一行(FIELDS ENCLOSED BY '"' TERMINATED BY ',' ESCAPED BY '\' LINES TERMINATED BY '\r\n') 取决于您保存 csv 文件的方式。 所以,请注意它;

我是如何保存 csv 文件的:

SELECT * FROM your_table_name into outfile 'YourDiskName:\\SomeFolder\\fileName.csv'

FIELDS ENCLOSED BY '"' TERMINATED BY ',' ESCAPED BY '\\' 

(Enclose fields iva ") , (Terminate fields by , ) , (Escape them vai \ )

为了得到结果,你我的朋友可以创建一个 VIEW 并在你定义所有内容并连接到数据库之后在 PHP 中调用 VIEW。

在 PHP 中定义和连接:

define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PASS','');
define('DB_NAME','ttir');
$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);

$SelectQuery = mysqli_query($conn,"SELECT * FROM YourViewName");

if($SelectQuery){

$Data = mysqli_fetch_assoc($SelectQuery);

echo $Data
}else{

echo "Something went wrong";

}

观点:

 CREATE VIEW IF NOT EXISTS select_view AS
 SELECT * FROM your_table_name into outfile 'YourDiskName:\\SomeFolder\\fileName.csv'
    
    FIELDS ENCLOSED BY '"' TERMINATED BY ',' ESCAPED BY '\\'

执行查询后,它可以在 PHP 中使用,并以不同的方式显示,例如 JSON,您也可以在 android 中使用它,向用户显示,或任何其他方式。

感谢阅读,就是这样!

【讨论】:

    猜你喜欢
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 2013-05-02
    • 2017-08-01
    • 2021-12-30
    • 2017-01-21
    • 2013-02-19
    相关资源
    最近更新 更多