将目录中的所有文件解析到数据库中,什么也不做


Parse all files in a directory to database doing nothing

我有一个计划任务,它使用wget将xml更新从API下载到目录。

如果我在MySQL Workbench中手动运行,它会正确地将xml文件解析到数据库:

LOAD XML LOCAL INFILE 'C:''WGET''GetGame.php@id=773'
REPLACE
INTO TABLE test.games (id, GameTitle, Platform, ReleaseDate, Developer, PlatformId);

我正在尝试自动化这个过程,因为目录将不断接收要解析的新文件。我已经创建了一个.php脚本,它应该检查文件夹中的文件,并对文件夹中的任何内容运行SQL查询。(文件夹会在一小时内自行清理。)

运行此操作似乎没有任何作用。我可以确认它正在登录数据库,它似乎只是停留在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);"); 
}
?> 

任何关于我做错了什么的线索都将不胜感激。我在网上找不到任何可靠的东西,并尝试了许多变体。我会继续弄清楚这一点,如果我碰巧自己遇到这篇文章,我会更新它。

谢谢!

感谢您的尝试,但我已经找到了解决方案。我的第一个错误是假设$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变量更改为包含XML文件的文件夹,其中包含4个反斜杠而不是一个,它就会以接受的格式将完整路径传递给mySQL。脚本打印处理过的每个文件,并在运行后打印受影响的行数。如果存在mySQL错误,它会打印错误。