限界まで修正したのですが、値が格納されません。 何が原因でしょうか? エラーも表示されずデータベースには tutle link date 0 0 2022 のみ表示されております。
限界まで修正したのですが、値が格納されません。 何が原因でしょうか? エラーも表示されずデータベースには tutle link date 0 0 2022 のみ表示されております。 <?php try { $dsn = 'mysql:dbname=hlxclitx_wp1;host=localhost'; $user = 'hlxclitx_wp1'; $password = 'E.HrypHWxNmltXgC5eS26'; $dbh = new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//エラーが発生した時に、例外を投げる echo "データベースへの接続が出来ました"; }catch (PDOException $e) { echo $e->getMessage();// err時はメッセージを表示 exit; } //RSSをまとめる $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf',]; // insertの準備 $stmt = $dbh->prepare('insert into rss_feed (title, link, date) values (?, ?, ?)'); // URLのループ開始 テーブルに格納 foreach ($url1 as $url) { if (($rss = @simplexml_load_file($url)) === false) { continue; } foreach ($rss->item as $item) { $title = $item->title; $link = $item->link; $dc = $item->children('http://purl.org/dc/elements/1.1/'); $date = date('Y-m-d H:i:s', strtotime($dc->date)); $stmt->execute([$title, $link, $date]); } } // サイトごとに表示するなら、サイトタイトル表示はこの位置 printf('<h2>%s</h2>', $site_title); $count = 0; // 個別記事のループ開始 RSSの取得が始まる foreach ($rss->item as $item) { if (++$count > 8) break; $title = $item->title;//タイトル取得 $link = $item->link;//リンクを取得 $dc = $item->children('http://purl.org/dc/elements/1.1/');//RSSの情報を取得 $thumb = $item->thumb->url;//画像を取得 } // 取得した記事データの表示 $sql = 'SELECT * FROM rss_feed ORDER BY date DESC'; $stmt = $dbh->prepare($sql); $stmt->execute(); while ($item = $stmt->fetch(PDO::FETCH_OBJ)) { print('<ul>'); printf('<li class="sitelink"><a href="%s">%s</a></li>', $item->link, $item->title); printf('<li class="sitelink"><a href="%s">site</a></li>', $item->link); printf('<li class="sitedate">%s</li>', $item->date); print('</ul>'); } ?>
$stmtは直接変数を格納したり表示できないのでしょうか?
PHP・289閲覧・25
ベストアンサー
提示されたソースをコピペして実行してみましたが、問題なく title, link, date とも格納されます。 #Warning: Undefined variable $site_title という警告は出ますが、 #これは当然ですね executeに対してtry~catchで括っていないので、もしエラーが発生していても捕捉できていませんよね?まずはその部分を修正してください。 またテーブル定義(各カラムの文字数)はどうなっていますか? (こちらで試したソース) <?php try { __$dsn = 'mysql:host=localhost;dbname=test'; __$user = 'root'; __$password = ''; __$dbh = new PDO($dsn,$user,$password); __$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); __$url1 = ['a.txt', 'b.txt', 'c.txt']; // ブラウザで取得したソースをテキスト保存してデバッグした __$stmt = $dbh->prepare('insert into rss_feed (title, link, date) values (?, ?, ?)'); __foreach ($url1 as $url) { ____if (($rss = @simplexml_load_file($url)) === false) continue; ____foreach ($rss->item as $item) { ______$title = $item->title; ______$link = $item->link; ______$dc = $item->children('http://purl.org/dc/elements/1.1/'); ______$date = date('Y-m-d H:i:s', strtotime($dc->date)); ______$stmt->execute([$title, $link, $date]); ____} __} __$sql = 'SELECT * FROM rss_feed ORDER BY date DESC'; __$stmt = $dbh->prepare($sql); __$stmt->execute(); __while ($item = $stmt->fetch(PDO::FETCH_OBJ)) { ____print('<ul>'); ____printf('<li class="sitelink"><a href="%s">%s</a></li>', $item->link, $item->title); ____printf('<li class="sitelink"><a href="%s">site</a></li>', $item->link); ____printf('<li class="sitedate">%s</li>', $item->date); ____print('</ul>'); __} // 全体を try~catchに入れて、PDOのエラーは全部ここで捕捉する } catch (PDOException $e) { die($e->getMessage()); } ?> (蛇足) 下記の部分は「何もしていない」のですが、何か意味があったのでしょうか(こちらで試すときには削除しました)。$rss1 のループ終了後なので「最後に取得した$rss」についてしか処理していないし・・・ printf('<h2>%s</h2>', $site_title); $count = 0; foreach ($rss->item as $item) { if (++$count > 8) break; $title = $item->title;//タイトル取得 $link = $item->link;//リンクを取得 $dc = $item->children('http://purl.org/dc/elements/1.1/');//RSSの情報を取得 $thumb = $item->thumb->url;//画像を取得 }
この返信は削除されました