如何使用此代码从我的数据库中的多个源添加数据?

时间:2016-02-08 06:44:42

标签: php mysql rss

因此,目前,我使用的代码仅输入数据集中最后一个Feed的数据,即数据库中的feed4,并且不会添加其他3个Feed中的数据,我该如何解决这个问题,这是代码:

<?php

$db_hostname="";
$db_username="";
$db_password="";

$all_urls = array('feed1', 'feed2', 'feed3', 'feed4');

try
{


$db = mysql_connect($db_hostname,$db_username,$db_password);
if (!$db)
{
    die("Could not connect: " . mysql_error());
}
mysql_select_db("dbname", $db);

foreach ($all_urls as $url) {

libxml_use_internal_errors(true);
$RSS_DOC = simpleXML_load_file($url);
}
if (!$RSS_DOC) {
    echo "Failed loading XML\n";
    foreach(libxml_get_errors() as $error) {
        echo "\t", $error->message;
    }
}


$rss_title = $RSS_DOC->channel->title;
$rss_link = $RSS_DOC->channel->link;
$rss_editor = $RSS_DOC->channel->managingEditor;
$rss_copyright = $RSS_DOC->channel->copyright;
$rss_date = $RSS_DOC->channel->pubDate;
$rss_author = $RSS_DOC->channel->author;


foreach($RSS_DOC->channel->item as $RSSitem)
{

    $item_id    = md5($RSSitem->title);
    $fetch_date = date("Y-m-j G:i:s"); 
    $item_title = $RSSitem->title;
    $item_date  = date("Y-m-j G:i:s", strtotime($RSSitem->pubDate));
    $item_time  = date("H:i:s", strtotime($RSSitem->pubDate));
    $item_url   = $RSSitem->link;
    $item_author = $RSSitem->author;


    $item_exists_sql = "SELECT item_id FROM tablename where item_id = '" . $item_id . "'";
    $item_exists = mysql_query($item_exists_sql, $db);
    if(mysql_num_rows($item_exists)<1)
    {
        $item_insert_sql = "INSERT INTO tablename(item_id, feed_url, item_title, item_date, item_time, item_url, item_author, fetch_date) VALUES ('" . $item_id . "', '" . $url . "', '" . $item_title . "', '" . $item_date . "', '" . $item_time . "', '" . $item_url . "', '" . $item_author . "', '" . $fetch_date . "')";
        $insert_item = mysql_query($item_insert_sql, $db);
        echo "Inserted into Databse Successfully";
    }
    else
    {

    }
}


} catch (Exception $e)
{
echo 'Caught exception: ',  $e->getMessage(), "\n";
}
?>

PS:我知道不推荐使用mysql_ *,我的生产代码将使用mysqli。

1 个答案:

答案 0 :(得分:0)

我想你想为$all_url的每个网址运行脚本的漏洞循环。目前,您在$all_url之后完成$RSS_DOC=...的循环。这就是为什么$RSS_DOC包含&#39; feed4&#39;,最后一个网址,只有那个。

然后将闭合支撑移动到末端,就在阻挡块之前。

(不要混淆libxml_get_errors()包含所有网址的消息,因为它在foreach循环中得到了很好的填充。)