ошибка в обновлении таблицы с использованием ОБНОВЛЕНИЯ ДУБЛИКАТА КЛЮЧА

#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 поле, которое вызывает конфликт.