上記の環境にてrssの情報保存して、過去のエントリーまで表示できるrssリーダーを作っています。
RSSの情報を配列化した$rssShowを下記のようにmysqlに保存するとします。
<?php
require_once("DB.php");
$dsn="mysqli://pearusr:pearpass@localhost/pear";
$db=DB::connect($dsn);
$stt=$db->prepare("INSERT INTO rss_field(channel_title,channel_link,channel_desc) VALUES(?,?,?)");
foreach ($rssShow as $value) {
$result=$db->execute($stt,array($value['channelsTitle'],$value['channelsLink'],$value['channelsDesc']));
}
$db->disconnect();
?>
この形だと読み込むたびに、エントリー情報が重複されていきます。
こういった場合はどのように処理すれば、重複させずにmysqlに保存することができるのでしょうか?
ブログエントリーのURLである$value['channelsLink']をmysqlの情報と重複していないかチェックするような気がしますが、
よくわかりませんでした。
まだ勉強を始めたばかりなので、考え方も間違っていたらご指摘お願いします。
よろしくお願いいたします。
初心者ということで簡単にやるには2つ方法があります。(これはとにかく簡単にやるという内容です)
(1)prepare-executeではなく、doを使ってSQLを発行しwhere句に複問合せを書き、戻ってきた内容がNULL(IS NULL)の場合にINSERTする。
(2)乱暴ですが1発目はとにかくUPDATEで更新を発行してしまい、PHP側でDBIの戻り値を見て失敗している(同じKEYで登録されたデータが無い)場合INSERTで再発行する。