• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:RSSをMYSQLに入れる最適なコードがわからない)

RSSをMYSQLに入れる最適なコードがわからない

t_ohtaの回答

  • t_ohta
  • ベストアンサー率38% (5125/13384)
回答No.2

「INSERT INTO」はSQLの命令で、PHPの命令では無いので直接書いても実行されません。 PDOを使われているようなので、文字列変数にSQL文を入れて、それをPDOに渡して下さい。 あと、DBのパスワードは隠した方がいいですよ。

php_learn
質問者

補足

パスワードは大変失礼しました。 INSERT INTOはDBで使用するものなんですね。ご指摘ありがとうございます。 以下のコードの下に追記してみたのですが、間違いがありましたらご指摘いただけると助かります。 $title = $item->title; // タイトル $link = $item->link; // リンク $thumb = $item->thumb->url; // アイキャッチサムネイル $content = $item ->description;// 詳細、必要なのか不明 ※追記したコード //文字列変数(テーブル名)をSQL文を入れる $sql = 'title, link,thumb,content'; //PDOに渡すから$sqlという認識 $sql= $pdo->prepare('INSERT INTO '.$DB_table_name.' (title,link,thumb,content) VALUES (:title,:link,:thumb,content)'); //エラーを出さずに実行するためにはテーブル名のバインドをやめて、直接埋め込むしかありません。ここで各テーブルに値を入れる? $sql->bindParam(':title', $title, PDO::PARAM_STR);//STR は「文字列だよ」って事。 $sql->bindParam(':link', $link, PDO::PARAM_STR);//URLがSTRだったのでおそらくPARAM_INTではない $sql->bindParam(':thumb', $thumb, PDO::PARAM_STR);//画像はわからない $sql->bindParam(':content', $content, PDO::PARAM_STR); $sql->execute();

関連するQ&A

  • RSSの格納、表示がうまくいかない

    データベースへの接続は完了したんですが、RSSの格納がうまくいきません。 エラー文も表示されず原因がわからないのですが、おかしな文はありますでしょうか? <?php require_once(dirname(dirname(dirname(dirname( __FILE__ )))) . '/wp-load.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; } $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf',]; //itemを取り出して$rssに渡す $date = $rss->channel->date; // RSSアイテム取得 値の代入 自作関数 //SQL文を実行、結果を求める $stmt = $dbh->prepare('insert into hlxclitx_feed_rss (data) values (?)'); //$url1配列から先頭のデータをとりだして$urlに渡す なくなるまでループする foreach ($url1 as $url) { //rssがほしいから、もらった$urlを渡す if (($rss = @simplexml_load_file($url)) === false) continue; // RSSタイトルがほしいから、もらったrssを渡す $site_title = $rss->channel->title; //初期のカウント $count = 0; //itemを取り出して$rssに渡す ループ foreach ($rss->item as $item) { //8件を超えたとき取得を終了する if (++$count > 8) break; //タイトル、リンクを取得 $title = $item->title; $link = $item->link; //RSSの情報を取得 $dc = $item->children('http://purl.org/dc/elements/1.1/'); //RSS日付け取得 $date = date('Y-m-d H:i:s', strtotime($dc->date)); // $title, $link, $date を表示 $stmt->execute[json_encode($item)]; } } ?> 補足情報(FW/ツールのバージョンなど) db name hlxclitx_wp1 table name hlxclitx_feed_rss テーブル名 (data) 名前 item

    • ベストアンサー
    • PHP
  • データベースからの画像とタイトルにURLがつかない

    RSSを取得して格納までは成功したのですが、画像の取得ができずURL付き画像とタイトルを出力できていません。原因がわからないのですがどのようなことが考えられるでしょうか? <?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 = $pdo->prepare('insert into teblename (title, link, date) values (?, ?, ?)'); // URLのループ開始 テーブルに格納 foreach ($url1 as $url) { // simplexml_load_file()でRSSをパース解析してオブジェクトを取得します。 if (($rss = @simplexml_load_file($url)) === false) continue; $site_title = $rss->channel->title;// RSSタイトル取得 値の代入 自作関数 // サイトごとに表示するなら、サイトタイトル表示はこの位置 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;画像を取得 $thumbnail = '/images/dummy_thumbnail.jpg'; // 画像がない場合の代替画像 if ( $thumb ){ $thumbnail = $thumb; } // 取得した記事データの表示 if ($count === 1) print('<ul>'); $date = date('Y-m-d H:i:s', strtotime($dc->date));//RSS日付け取得 printf('<li>%s:%s:%s</li>', $title, $link, $date,$thumb);// $title, $link, $date,$thumb を表示 } if ($count) print('</ul>'); } ?>

    • ベストアンサー
    • PHP
  • RSSをデータベースに格納できない

    昨日教えていただいたコードで格納して表示するところまで成功しました。 自分の不注意でデータベースネームと違う、新規作成したテーブルに格納していたため起こったエラーでした。申し訳ありません。 再度全体のコードと組み合わせてみたのですがエラーが起こり困っております。 Uncaught Error: Call to a member function insert() on null <?php $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf', ]; foreach ($url1 as $url) { $count = 0; $rss = simplexml_load_file($url); foreach ($rss->item as $item) { if ($count >= 8) { break; } ++$count; $title = (string) $item->title; //「$item->title」だけではうまくいかないのでstringにキャスト $link = (string) $item->link; //以下同じ $thumb = (string) $item->thumb->url; $content = (string) $item->description; $wpdb->insert('rssfeed', ['title' => $title, 'link' => $link, 'thumb' => $thumb, 'content' => $content], ['%s', '%s', '%s', '%s']); } } $results = $wpdb->get_results('SELECT * FROM rssfeed'); foreach ($results as $item) { echo $item->title.'<br>'; } ?> <?php $wpdb->show_errors(); ?>

    • ベストアンサー
    • PHP
  • RSSのXMLロードで失敗してしまう

    RSSのデータを取得する、という処理を行いたいのですが、 文字コードの件でひっかかってしまっているようで なかなか前に進むことができません。 ************ // RSSの内容を取得する $rss_text = file_get_contents(※RSSのフィードURL); // RSSの文字エンコーディングを変換→再変換 $rss_text = mb_convert_encoding($rss_text, 'SJIS', 'UTF-8'); $rss_text = mb_convert_encoding($rss_text, 'UTF-8', 'SJIS'); $rss_text = preg_replace('/[\x00-\x1f]/', '', $rss_text); // RSSをパースする $rss_xml = new SimpleXMLElement($rss_text); if ($rss_xml) { // XML解析に成功した場合 // SimpleXMLElementオブジェクトからデータを取得 $items = $rss_xml->item; foreach($items as $item) { echo 'ID:'. $item->guid. '<br />'; echo 'リンク:'. $item->link. '<br />'; echo '日付:'. $item->pubDate. '<br />'; echo 'タイトル:'. $item->title. '<br />'; echo '本文:'. $item->description. '<br />'; } } ************ こういったコードを組んでいるのですが、現状では Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : attributes construct error in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Couldn't find end of Start Tag rss line 1 in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Extra content at the end of the document in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... このようなエラーが表示されてしまいます。 自分なりに文字コードを処理しているつもりではあるのですが、 他にも何かしなければならないことがあるのでしょうか? どうぞ知恵を貸していただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP ブログの交信記録

    PHP初心者です。 下記のソースで一行目の$rss = simplexml_load_file( 以降にアドレスを入れて、ブログの更新情報を表示させたいのですが、うまくいきません。なぜでしょうか? <?php $rss = simplexml_load_file("http://d.hatena.ne.jp/xxxx/rss"); foreach ($rss->item as $item) { $dc = $item->children('http://purl.org/dc/elements/1.1/'); $link = $item->link; $title = $item->title; $date = $dc->date; $date = strtotime($date); $date = date('Y/m/d',$date); echo "<li>$date&nbsp;:&nbsp;<a href=\"$link\">$title</a></li>\n"; } ?>

    • 締切済み
    • PHP
  • タイトルと画像にリンクを付けたい

    クラスを付けることはできたんですが、リンクを付けることができません。 調べてもわからなかったのですが、どのようにコード修正すればよいでしょうか? ※該当コード printf('<li class="sitetitle">%s</li>', $title); printf('<li class="sitelink">%s</li>', $link); printf('<li class="sitedate">%s</li>', $date); printf('<li class="sitethumb">%s</li>', $thumbnail); print '</ul>';// $title, $link, $date,$thumb を表示 <?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 teblename (title, link, date) values (?, ?, ?)'); // URLのループ開始 テーブルに格納 foreach ($url1 as $url) { // simplexml_load_file()でRSSをパース解析してオブジェクトを取得します。 if (($rss = @simplexml_load_file($url)) === false) continue; $site_title = $rss->channel->title;// RSSタイトル取得 値の代入 自作関数 // サイトごとに表示するなら、サイトタイトル表示はこの位置 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;//画像を取得 // 取得した記事データの表示 if ($count === 1) print('<ul>'); $date = date('Y-m-d H:i:s', strtotime($dc->date));//RSS日付け取得 printf('<li class="sitetitle">%s</li>', $title); printf('<li class="sitelink">%s</li>', $link); printf('<li class="sitedate">%s</li>', $date); printf('<li class="sitethumb">%s</li>', $thumbnail); print '</ul>';// $title, $link, $date,$thumb を表示 } if ($count) print('</ul>'); } ?>

    • ベストアンサー
    • PHP
  • テーブル格納して表示した記事を重複で表示させない

    以下のコードに①select countを用いる方法と②select existsを用いる方法を使いコンテンツの重複を避けるようにしたいと思っています。 調べたところ、以下の場合はselect countを避けるべきだとありました。RSSをテーブルに1ページ36×10ページの360コンテンツ格納するつもりです。この場合かなり重くなることが想定されるのですが、select existsを使いすでに表示された記事を除外することはできるのでしょうか?idなどで除外している例はあるのですが、すでに表示した記事にはないため方法がわかりません。 ・カウント対象件数が多い ・インデックスが効かない ・繰り返し実行することが多い <?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 teblename (title, link, date) values (?, ?, ?)'); // URLのループ開始 テーブルに格納 foreach ($url1 as $url) { // simplexml_load_file()でRSSをパース解析してオブジェクトを取得します。 if (($rss = @simplexml_load_file($url)) === false) continue; $site_title = $rss->channel->title;// RSSタイトル取得 値の代入 自作関数 // サイトごとに表示するなら、サイトタイトル表示はこの位置 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 exists ('select * from rss_feed')"; // 取得した記事データの表示 if ($count === 1) print('<ul>'); $date = date('Y-m-d H:i:s', strtotime($dc->date));//RSS日付け取得 printf('<li class="sitelink"><a href="%s">%s</a></li>', $link, $title); printf('<li class="sitelink"><a href="%s">site</a></li>', $link); printf('<li class="sitedate">%s</li>', $date); printf('<li class="sitethumb"><a href="%s"><img src="%s"></a></li>', $link, $thumbnail); print '</ul>';// $title, $link, $date,$thumb を表示 } if ($count) print('</ul>'); } ?>

    • ベストアンサー
    • PHP
  • SimpleXMLでRSSを扱う

    SimpleXMLでRSSを解析したいのですが、SimpleXMLの使い方がイマイチわかりません。 取得したいRSSは以下の東京の天気予報です。 ひとくち予報 in Feed http://www.weathermap.co.jp/hitokuchi_rss/ ウェザーマップ 東京 http://feeds.feedburner.jp/hitokuchi_4410 forecast要素までは取り出せるのですが、そこからtemperatureのmaxやmixを取り出す方法がよく分からないのです。 以下のソースのようにしたとき、$forecastの子要素はまだSimpleXMLElement Objectです。 $atom = simplexml_load_file("http://feeds.feedburner.jp/hitokuchi_4410"); //東京の天気予報 foreach ($atom->channel->item as $item) { $forecast = $item->children("http://www.weathermap.co.jp/rss/ns/forecast.dtd"); } よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPで以下のサイトのrssの情報を獲得したいのですが、なぜか<ite

    PHPで以下のサイトのrssの情報を獲得したいのですが、なぜか<item>を獲得できません。 rss: http://twib.jp/rss phpコード: $rss =simplexml_load_file('http://twib.jp/rss'); print_r($rss); $title =$rss->channel->title; echo $title; foreach ($rss->channel->item as $item) { echo $item->title; echo $item->description; echo $item->link; echo $item->pubDate; } どなたか、どこを直せばよいか教えていただけないでしょうか。

    • 締切済み
    • PHP
  • simplexml_load_fileを使用してblogのRSSを読み

    simplexml_load_fileを使用してblogのRSSを読み込み、ページ内に表示させたいのですが 下記のスクリプトでは楽天とlivedoorのRSSの読み込みが出来ません。 色々検索してみたのですがこれといった解決法を発見できなかったので質問させていただきます。 どうぞよろしくお願いいたします。 <?php $xml = simplexml_load_file('RSSをここに入力'); $i = 0; foreach($xml->channel->item as $item) { if(++$i>5) break; $title = (string)$item->title ; $link = (string)$item->link ; echo ("<li><a href=".$link.">".$title."</a></li><br />"); } ?>

    • ベストアンサー
    • PHP