Получение ошибки MySQL 1064 при выполнении запроса INSERT - PullRequest
0 голосов
/ 05 октября 2009

То, что я делаю, - это захват канала и вставка данных из каждого элемента канала. Пожалуйста, смотрите ниже код, который я использую. Хорошо. Итак, я запускаю страницу с запросом, она загружает канал в simplexml, и я вставляю первые два элемента в канал, однако при получении третьего элемента я получаю ошибку Ниже приведена ошибка, которую я получаю.

Я использую 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)

Фид URL:

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>

Ответы [ 2 ]

3 голосов
/ 05 октября 2009

Вам нужно экранировать кавычки (как минимум) в поле «описание», прежде чем вводить его в БД:

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 - это то, что сейчас так часто используется.

1 голос
/ 05 октября 2009
'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)
";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...