#php #mysql
#php #mysql
Вопрос:
Я читаю и сохраняю RSS-канал в своей базе данных, мое требование — если поле ссылки такое же, тогда обновите заголовок и описание только в базе данных.
Я использую ОБНОВЛЕНИЕ ДУБЛИКАТА КЛЮЧА, но после введенного запроса. он вставляет только отдельные данные в базу данных и не удается и показывает ошибку
мой код
<?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 ;
и ошибка
Дублирующая запись ‘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() );
}
?>
и это решает мою проблему….
Комментарии:
1. Вы запускаете SQL-запрос перед его полной сборкой. Однако на самом деле это не объясняет ошибку, которую вы получаете, пожалуйста, дважды проверьте код, который вы опубликовали здесь.
Ответ №1:
ВСТАВИТЬ… ДЛЯ ДУБЛИКАТА должен быть один запрос:
$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() );
Ответ №2:
Вы забыли обновить link
поле, которое вызывает конфликт.