• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:executeの実行が一回しかされない)

executeの実行が一回しかされない

このQ&Aのポイント
  • PHPのループ処理でexecuteを実行すると、最初の一回しか実行されず、DBへの書き込みも一度しかされません。
  • 原因としては、プリペアドステートメントの実行がループ内でなく、ループ外にあることが考えられます。
  • プリペアドステートメントをループ内に移動させて実行するように修正することで、ループ内でのexecuteが正常に実行され、DBへの書き込みもループ回数分行われます。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

まぁなんとも言えませんが rss テーブルのプライマリーキー(もしくは何らユニークキー)が 競合を起こしていたりしませんか?

daiup
質問者

お礼

早速のご回答ありがとうございました。 なんと、おっしゃるとおりでした。 ユニークキーが競合していました。 こういったことって自分では気がつかないものですね。 本当にありがとうございました。 またよろしくお願いいたします。

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

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(); }

daiup
質問者

お礼

ご丁寧にソースまで書いていただきありがとうございました。 本当に感謝いたします。 原因は単純なことでした。 キーが競合していたみたいです。 まだまだ初心者ですので、引き続きよろしくお願いいたします。

関連するQ&A

専門家に質問してみよう