Я читаю и храню rss-канал в своей базе данных, мое требование – если поле ссылки такое же, как и заголовок и описание обновления только в базе данных.
Я использую ON DUPLICATE KEY UPDATE, но после ввода query.its вставляют только отдельные данные в базу данных и сбой и показывают ошибку
мой код
<?php include_once 'db.php'; $homepage = file_get_contents('http://rss.cnn.com/rss/edition_us.rss'); $movies = new SimpleXMLElement($homepage); foreach($movies->channel->item as $opt){ $title= $opt->title; $tittle=mysql_real_escape_string($title); $link=$opt->link; $links=mysql_real_escape_string($link); $des=$opt->description; $dess=mysql_real_escape_string($des); "INSERT INTO store_feed (title, link, description) VALUES ('$tittle','$links','$dess')"; $sql="ON DUPLICATE KEY UPDATE title= '$tittle',description='$dess'"; $result=mysql_query($sql) or die( mysql_error() ); } ?>
и структура таблицы: –
CREATE TABLE `test_om`.`store_feed` ( `id` INT NOT NULL AUTO_INCREMENT , `title` VARCHAR( 200 ) NOT NULL , `link` VARCHAR( 200 ) NOT NULL , `description` VARCHAR( 500 ) NOT NULL , `feedburner` VARCHAR( 200 ) NOT NULL , PRIMARY KEY ( `id` ) , UNIQUE ( UNIQUE KEY `link` (`link`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
и ошибка Duplicate entry 'http://rss.cnn.com/~r/rss/edition_us/~3/Wl1V4JsNqDU/index.html' для ключевой ссылки '
Я сделал некоторые изменения в моем запросе, коротко.
<?php include_once 'db.php';//config file $homepage = file_get_contents('http://rss.cnn.com/rss/edition_us.rss');//link of rss feed page $movies = new SimpleXMLElement($homepage); foreach($movies->channel->item as $opt){ $sql="INSERT INTO store_feed SET `title` = '".mysql_real_escape_string($opt- >title)."', `link`='".mysql_real_escape_string($opt->link)."', `description`='".mysql_real_escape_string($opt->description)."'" ."ON DUPLICATE KEY UPDATE `title`='".mysql_real_escape_string($opt->title). "',`description`='".mysql_real_escape_string($opt->description)."'"; $result=mysql_query($sql) or die( mysql_error() ); } ?>
и его решить мою проблему ….
INSERT … ON DUPLICATE должен быть одним запросом:
$sql="INSERT INTO store_feed (title, link, description) VALUES ('$tittle','$links','$dess')" ." ON DUPLICATE KEY UPDATE title= '$tittle',description='$dess'"; $result=mysql_query($sql) or die( mysql_error() );
Вы забыли обновить поле link
которое вызывает конфликт.