将目录中的所有文件解析为数据库不执行任何操作

时间:2013-08-15 23:43:25

标签: php mysql

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

如果我在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);"); 
}
?> 

任何关于我做错的任何线索都将不胜感激。我在网上找不到任何实体,并尝试了很多变化。我将继续解决这个问题,如果我碰巧遇到这个问题,我会更新这篇文章。

谢谢!

1 个答案:

答案 0 :(得分:0)

感谢您的尝试,但我找到了解决方案。我的第一个错误是假设$ 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错误,则会输出错误。