2009-10-04 113 views
0

我正在做的是抓取饋送並從每個饋送項插入數據。請參閱下面的代碼我正在使用。好。因此,我使用查詢運行該頁面,它將該源加載到simplexml中,並且將前兩個項目插入到源中,但是當它到達第三個項目時出現錯誤。請參閱下面的錯誤我收到。執行INSERT查詢時獲取MySQL錯誤1064

我使用PHP5 &的MySQL 5.0.4

PHP代碼:

$xml = simplexml_load_file($feed['url']); 

foreach($xml->channel->item as $item) 
{      
    $this->query = $this->db->query(" 
    INSERT INTO `feed_items` 
    (`feed_id`, `guid`, `publish_date`, `update_of`, `link`, `title`, `description`, `comments_link`) 
    VALUES 
    ('{$feed['id']}', '{$item->guid}', '{$item->pubDate}', NULL, '{$item->link}', '{$item->title}', '{$item->description}', NULL) 
    "); 
} 

錯誤:

A Database Error Occurred 
Error Number: 1064 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'permitted_uri_chars']? That seems risky though. Is it a static page that you're ' at line 4 

INSERT INTO `feed_items` (`feed_id`, `guid`, `publish_date`, `update_of`, `link`, `title`, `description`, `comments_link`) VALUES ('2', 'http://twitter.com/kyct/statuses/4131154118', 'Sun, 20 Sep 2009 20:54:41 +0000', NULL, 'http://twitter.com/kyct/statuses/4131154118', 'kyct: @jtkendall Edit your $config['permitted_uri_chars']? That seems risky though. Is it a static page that you're serving?', 'kyct: @jtkendall Edit your $config['permitted_uri_chars']? That seems risky though. Is it a static page that you're serving?', NULL) 

飼料網址:

http://twitter.com/statuses/user_timeline/6431322.rss

下面是該飼料的樣本:

<?xml version="1.0" encoding="UTF-8"?> 
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> 
    <channel> 
    <title>Twitter/kyct</title> 
    <link>http://twitter.com/kyct</link> 
    <atom:link type="application/rss+xml" href="http://twitter.com/statuses/user_timeline/6431322.rss" rel="self"/> 
    <description>Twitter updates from Kylee Tilley/kyct.</description> 
    <language>en-us</language> 
    <ttl>40</ttl> 
    <item> 
    <title>kyct: RT @ruinbox #reddit asploded. Here is the code: http://paste2.org/p/441124</title> 
    <description>kyct: RT @ruinbox #reddit asploded. Here is the code: http://paste2.org/p/441124</description> 
    <pubDate>Mon, 28 Sep 2009 03:01:34 +0000</pubDate> 
    <guid>http://twitter.com/kyct/statuses/4433385042</guid> 
    <link>http://twitter.com/kyct/statuses/4433385042</link> 
    </item> 
    <item> 
    <title>kyct: #reddit.com is hitting hit by some worm/exploit in the comments. Viewing comments will cause you to spread this worm/exploit.</title> 
    <description>kyct: #reddit.com is hitting hit by some worm/exploit in the comments. Viewing comments will cause you to spread this worm/exploit.</description> 
    <pubDate>Mon, 28 Sep 2009 02:22:51 +0000</pubDate> 
    <guid>http://twitter.com/kyct/statuses/4432550280</guid> 
    <link>http://twitter.com/kyct/statuses/4432550280</link> 
    </item> 
    <item> 
    <title>kyct: @jtkendall Edit your $config['permitted_uri_chars']? That seems risky though. Is it a static page that you're serving?</title> 
    <description>kyct: @jtkendall Edit your $config['permitted_uri_chars']? That seems risky though. Is it a static page that you're serving?</description> 
    <pubDate>Sun, 20 Sep 2009 20:54:41 +0000</pubDate> 
    <guid>http://twitter.com/kyct/statuses/4131154118</guid> 
    <link>http://twitter.com/kyct/statuses/4131154118</link> 
    </item> 
    </channel> 

</rss> 

回答

3

你需要躲避在(至少)'description'字段中輸入db之前的引號:

foreach($xml->channel->item as $item) 
{          
    $this->query = $this->db->query(" 
    INSERT INTO `feed_items` 
    (`feed_id`, `guid`, `publish_date`, `update_of`, `link`, `title`, `description`, `comments_link`) 
    VALUES 
    ('{$feed['id']}', '{$item->guid}', '{$item->pubDate}', NULL, '{$item->link}', '{$item->title}', '" . mysql_real_escape_string($item->description). "', NULL) 
    "); 
} 

雖然我不確定是否mysql_real_escape_string是現在使用的那麼多。

+0

這工作。這總是很簡單。謝謝! – Kylee 2009-10-04 21:20:39

+0

標題字段我相信,不只是描述,而是相同的原則 – 2009-10-04 21:24:23

1
'kyct: @jtkendall Edit your $config['permitted_uri_chars']? That seems risky though. Is it a static page that you're serving?', 'kyct: @jtkendall Edit your $config['permitted_uri_chars']? That seems risky though. Is it a static page that you're serving?' 

你需要逃脫單引號,像這樣:

"INSERT INTO `feed_items` 
(`feed_id`, `guid`, `publish_date`, `update_of`, `link`, `title`, `description`, `comments_link`) 
VALUES 
('{$feed['id']}', '{$item->guid}', '{$item->pubDate}', NULL, '{$item->link}', '" . mysql_real_escape_string($item->title) . "', '" . 
mysql_real_escape_string($item->description) . "', NULL) 
"; 
+0

請嘗試我的最新更新版本,它應該解釋產品標題和說明。 – 2009-10-04 21:18:13