命令行MySQL脚本

时间:2014-12-20 20:24:16

标签: php mysql perl command-line command-line-arguments

试图找出解决这个问题的方法,然后回到方阵1。

我的托管软件包显然只有来自命令行的PHP,SendMail和Perl支持软件 - 但我需要找出运行SQL脚本的最佳方法,无论是从命令行作为MySQL脚本(如果(可能),或在PHP或Perl脚本中。

我在PHP脚本中尝试了以下脚本,但是LOAD DATA LOCAL INFILE阻止它正常运行,所以我很难解决一个更简单的解决方案...但是在这个阶段我会做拿任何!

<?php
$con = mysqli_connect('xxx.xxx.xxx.xx', 'xxxx-xxxxxxx', 'xxxxxxxxx', 'xxxx-xxxxxxx');
mysqli_query($con, "LOAD DATA LOCAL INFILE 'http://www.mydomain.co.uk/datafeed.csv' REPLACE INTO TABLE product_feed FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS");
mysqli_close($con);

命令行对我来说是一个新手,说实话我只需知道如何为更新脚本构建一个计划任务/ cron作业。

任何人都可以帮助我

1 个答案:

答案 0 :(得分:0)

你在哪里运行这个?我认为www.mydomain.co.uk是您的服务器,而您是从外部客户端访问它的?

LOAD DATALOAD DATA LOCAL之间的主要区别在于后者将文件从客户端复制到服务器中的临时文件,然后使用复制的文件继续作为普通LOAD DATA命令;但 MySQL客户端和服务器必须已明确构建才能启用它。由于这是一个潜在的安全漏洞,我非常怀疑服务器是否已经以这种方式构建。

也不会接受HTTP网址 - 您需要指定路径。如果您使用LOAD DATA仅指定一个裸文件名,那么服务器将在默认数据库目录中查找它;或者如果它是具有目录组件的 relative 路径,则服务器将其视为相对于数据目录;当然,绝对路径是按字面意思使用的。

如何使其工作取决于您可以写入哪些服务器目录,MySQL服务器也可以读取。 LOAD DATA LOCAL几乎无法获得,因为您可以自己复制CSV文件并对其进行更多控制。最有可能的候选者是数据目录,您可以发现使用

的位置
SHOW VARIABLES WHERE Variable_Name = "datadir"

然后,如果您将文件myfile.csv放入此目录,则可以使用

LOAD DATA INFILE "./myfile.csv" ...

让服务器从您的文件加载表。

我希望这会有所帮助。