重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

foreach ($rss->channel->item as $val) {

$title = $val->title;
$link = $val->link;
$description = $val->description;
$pubDate = $val->pubDate;
$dccreator = $val->dccreator

$stmt = $dbh->prepare("insert into rss (title,link,description,pubDate,dccreator) values(?,?,?,?,?)");
$stmt->execute(array($title,$link,$description,$pubDate,$dccreator));

}

上のような感じでexecuteの実行をループさせようとしています。
しかし最初の一回しか実行されません。(DBへの書き込みが最初の一度しかされません)

すいませんが、何かアドバイスいただけませんでしょうか?
よろしくお願いいたします。

A 回答 (2件)

まぁなんとも言えませんが


rss テーブルのプライマリーキー(もしくは何らユニークキー)が
競合を起こしていたりしませんか?
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。
なんと、おっしゃるとおりでした。
ユニークキーが競合していました。

こういったことって自分では気がつかないものですね。
本当にありがとうございました。
またよろしくお願いいたします。

お礼日時:2014/11/20 16:28

foreach の内側が複数回実行されることは(echoや自前のカウンタを使うなどで)確認されているんですよね?



とりあえず書き直したい部分を

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {
$stmt = $dbh->prepare("insert into rss (title,link,description,pubDate,dccreator) values(?,?,?,?,?)");
$ct = 0;
foreach ($rss->channel->item as $val) {
$title = $val->title;
$link = $val->link;
$description = $val->description;
$pubDate = $val->pubDate;
$dccreator = $val->dccreator
$stmt->execute(array($title,$link,$description,$pubDate,$dccreator));
printf("%s insert<br>", $title); // デバッグ用
$ct++;
}
printf("%d records insert<br>", $ct); // デバッグ用
} catch(PDOException $e) { die($e->getMessage(); }
    • good
    • 0
この回答へのお礼

ご丁寧にソースまで書いていただきありがとうございました。
本当に感謝いたします。

原因は単純なことでした。
キーが競合していたみたいです。

まだまだ初心者ですので、引き続きよろしくお願いいたします。

お礼日時:2014/11/20 16:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!