0

我有一个使用 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);"); 
}
?> 

任何关于我做错了什么的线索都将不胜感激。我在网上没有找到任何可靠的东西,并尝试了很多变体。我将继续解决这个问题,如果我自己碰巧遇到它,我会更新这篇文章。

谢谢!

4

1 回答 1

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 错误,它会打印错误。

于 2013-08-16T17:24:23.583 回答