我有一个预定的任务,它使用wget将xml更新从API下载到目录。
如果我在中手动运行它,它将正确地将MySQL文件解析到数据库:
LOAD XML LOCAL INFILE 'C:\\WGET\\GetGame.php@id=773'
REPLACE
INTO TABLE test.games (id, GameTitle, Platform, ReleaseDate, Developer, PlatformId);我正在尝试自动化这个过程,因为目录将不断地接收要解析的新文件。我已经创建了一个.php脚本,它应该检查文件夹中的文件,并对文件夹中的任何内容运行SQL查询。(文件夹会在小时内自行清除。)
运行这个似乎没什么作用。我可以确认它正在登录到DB中,它似乎只是停留在mysql查询上。(PHP不是我的专长,所以问题可能是一个愚蠢的语法错误。)
<?php
mysql_connect('localhost','root','');
mysql_select_db('test');
$files = glob('GetGame.*');
foreach($files as $file){
mysql_query("LOAD XML LOCAL INFILE '".$file."' REPLACE INTO TABLE test.games (id, GameTitle, Platform, ReleaseDate, Developer, PlatformId);");
}
?> 任何关于我做错了什么的线索都会受到极大的感谢。我在网上没有发现任何可靠的东西,并且尝试过许多变体。我将继续了解这一点,如果我碰巧遇到它,我自己会更新这篇文章。
谢谢!
发布于 2013-08-16 17:24:23
谢谢你的努力,但我找到了解决办法。我的第一个错误是假设$file在实际返回文件名时返回完整路径。我创建了第二个保存文件路径的变量,并将两个变量连接到一个新变量中,以便在mySQL查询中使用。可能不完美,但在我的情况下有效。
<?php
mysql_connect('localhost','root','password') or die(mysql_error());
mysql_select_db('your_database');
$files = glob('filename.ext');
foreach($files as $file)
{
$path = 'C:\\\\directory\\\\directory\\\\';
$fullpath = $path . $file;
echo $fullpath;
mysql_query("LOAD XML LOCAL INFILE '".$fullpath."' REPLACE INTO TABLE database.table (columns, to, parse, into, database)")
or die("A MySQL error has occurred. Error: (" . mysql_errno() . ") " .mysql_error());
}
echo "Rows affected: " . mysql_affected_rows();
mysql_close();
?>我发布了完整的脚本,因为我还没有看到一个很好的简单解决方案。当谷歌搜索“解析文件夹xml到mysql”时,这篇文章是第二个结果,希望这能帮助一些人。
这将做什么:只要您将$path变量更改为用4个反斜杠而不是一个反斜杠保存XML文件的文件夹,它将以它接受的格式传递到mySQL的完整路径。脚本打印每个已处理的文件,并在运行后打印受影响的行数。如果存在mySQL错误,则打印错误。
https://stackoverflow.com/questions/18263710
复制相似问题