我正在试图弄清楚如何构建我的脚本并需要一些帮助。
我正在使用PHP 5和MySQL 5.1.67
我的目标是能够从数据库中提取某些字段,在PHP中重新格式化它们并将它们显示为列表。重新格式化将包括HTML序列。我的目标是使用自动CRON脚本自动更新网页。
我对这些语言的经验很少。所以任何帮助都会很好。
我的逻辑是我应该将所有内容加载到一个(mysql)表中。我的XML使用latin1字符集。类别,ID,标题和描述是表格中的每一列。
这是mysql结构:
类别mysql使用VARCHAR Latin1
网站只是用于下面分组
id mysql使用VARCHAR Latin1
标题mysql使用VARCHAR Latin1
描述mysql使用VARCHAR Latin1
XML结构如下:
// XML Structure
// 23 categories to loop through
// hunderds of sites to loop through per category
//
<catalog>
<category>
<name>Category_Name</name>
<site>
<id>UR545665U</id>
<pagerank>1</pagerank>
<title>Title_Name</title>
<description>Description_of_the_site</description>
</site>
</category>
</catalog>
//
//
我已经开始使用以下代码加载我的XML和DB了。
//mysql connection
$con2 = mysql_connect("www.hosting.com","db_username","db_password");
if (!$con2) {
die('Could not connect: ' . mysql_error());
}
$dbcon1 = mysql_select_db("database_name", $con2);
if (!$dbcon1) {
die ('Can\'t use database_name : ' . mysql_error());
}
//simplexml load xml file with simplexml
$library= simplexml_load_file('feed.xml');
if ($xml === false) {
echo "Failed loading XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
然后这里是我遇到麻烦的地方......我需要遍历类别并在其中循环遍历网站。我遇到的麻烦是我不能使用getName()函数,因为<category>
和<site>
没有在xml中命名。因此,我使用<name>
来识别该类别,因为它是唯一的,<id>
用于识别网站,也是唯一的。
所以我的逻辑就是在其中拥有一个foreach()函数。循环遍历类别并循环遍历其类别中的每个站点。
//begin loop each category and each site
foreach($library->xpath('/Catalog/Category/Name') as $category) {
foreach($library->xpath('/Catalog/Category/Name/Site/Id') as $id) {
$site = $library->xpath('//Site');
$title = $site->Title;
$description = $site->Description;
从这一点来说,是使用mysql 5正确的转义序列正确格式化sql进程以避免黑客入侵。
我想这样做的方式如下:
// Format Query String into a variable
// Note: VALUES are in "" because they may contain strings
// sprintf() will run on each loop to format the new <site> string
$mynewquery = sprintf('REPLACE INTO Table_Name (id, title, description, category) VALUES (\"%4$s\",\"%6$s\",\"%7$s\",\"%3$s\")');
if ($mynewquery === false) {
echo "Failed formatting query string\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
//Run Query String to load data into DB
mysql_query($mynewquery);
if (!$mynewquery) {
die ('Error running Query: ' . mysql_error());
}
//
// close the loops and database connection after this.
我使用echo语句(未显示)来获得有关该过程的反馈。它一直在加载XML而没有错误。我的猜测是我在循环过程中遇到语法问题。所以我有几个问题:
有关如何使这项工作的任何建议?我试过了,但是DB没有加载数据。
答案 0 :(得分:0)
您循环遍历xml元素,但根本没有引用循环变量。你需要更像这样的东西:
foreach($library->Category as $category) {
foreach($category->Site as $site) {
$id = $site->Id;
$title = $site->Title;
$description = $site->Description;
//- insert into db here
}
}