複数のRSSをPDOでMySQLに登録する方法

このQ&Aのポイント
  • PHP 5.1.6とMySQL 5.0.77を使用して、複数のRSSを読み込み、RSS記事のタイトルとURLをMySQLに登録する方法を教えてください。
  • 既にRSSの記事を表示することには成功しており、35個の記事リストが表示されています。しかし、DBに登録する処理を追加すると、1個目のRSS記事20個が正常に登録されますが、21個目以降はエラーが発生してしまいます。
  • 具体的なプログラムの中で問題が発生している箇所は、「ループの中でPDOを使ったデータ登録」の部分です。可能な解決策や改善点について教えていただきたいです。
回答を見る
  • ベストアンサー

複数のRSSのタイトル等をPDOでMySQLに登録

複数のRSSを読み込み、RSS記事のタイトル・RSS記事のURLをMySQLに登録する方法について教えて頂ければと思います。 具体的にプログラムも作ってみましたが、もう一歩のところでうまくいきません。 うまくいっていないのは、「ループの中でPDOを使ったデータ登録」部分です。 ご回答宜しくお願い致します。 環境 PHP:5.1.6 MySQL:5.0.77 (目的) 複数のRSSを読み込み、RSS記事のタイトル・RSS記事のURLをMySQLに登録する。 (現状) 複数のRSSの記事を表示することには成功しています。 RSS1個目(記事数20)、RSS2個目(記事数15)の場合、35個の記事リストが表示される状態まではうまくいっています。しかし、PDOを使ってDBに登録の処理を入れると、RSS1個目の記事数20個が画面に表示され、MySQLにもRSS1個目の記事数20個分が登録される状態 になってしまいます。 ※RSS取得の形式はRSS2.0とします。(実際にはAtom、rdfにも対応させますが今回はDBの登録部分の質問なので) 【テーブル構成】 [RSSのタイトル・URL登録] テーブル名:rss_list (3列構成) フィールド名:id(auto_increment),title,url [RSSの記事タイトル・RSSの記事URL・RSSの発行日時] テーブル名:rss_data (4列構成) フィールド名:id(auto_increment),rss_title,rss_url,rss_date --------------表示まで成功したソース(始)---------------------------------- try { $dbh=newPDO($DSN,$DBUSER,$DBPASS); $query='SELECT*FROM rss_list' $stmt=$dbh->query($query); //rss_listテーブルよりtitle,urlを取得 while($result=$stmt->fetch(PDO::FETCH_ASSOC)) { $url=($result['url']); $title=($result['title']); echo$title.'<br>'; //RSS情報を取得 $xml=simplexml_load_file($url); foreach($xml->channel->itemas$entry) {   $entrydate=date("Y.m.d.H:i",strtotime($entry->pubDate)) $entry_title=strval($entry->title); $entry_url=strval($entry->link); $entry_cate=strval($entry->category); echo'<li><span>'.$entrydate.'</span>'; echo'<ahref="'.$entry->link.'">&nbsp&nbsp'.$entry->title.'</a>; }//foreach終了 }//while終了 } catch(PDOException$e) { print"Error!:".$e->getMessage()."<br>"; die(); }//catch_end --------------表示まで成功したソース(終)---------------------------------- 上記プログラムのRSS情報を取得する部分 foreachの中にDBへの登録の処理を加えます。 --------------DBへの登録追加(始)---------------------------------- try { $dbh=newPDO($DSN,$DBUSER,$DBPASS); $query='SELECT*FROMrss_list' $stmt=$dbh->query($query); //rss_listテーブルよりtitle,urlを取得 while($result=$stmt->fetch(PDO::FETCH_ASSOC)) { $url=($result['url']); $title=($result['title']); echo$title.'<br>'; //RSS情報を取得 $xml=simplexml_load_file($url); foreach($xml->channel->itemas$entry) {   $rss_date=date("Y.m.d.H:i",strtotime($entry->pubDate)) $rss_title=strval($entry->title); $rss_url=strval($entry->link); echo'<li><span>'.$entrydate.'</span>'; echo'<ahref="'.$entry->link.'">&nbsp&nbsp'.$entry->title.'</a>; //追加部分(開始) try { $dbh2=newPDO($DSN,$DBUSER,$DBPASS); $query2='INSERT INTO rss_data SET(rss_title,rss_url,rss_date)VALUES(:rss_title,:rss_url,:rss_date)'; $stmt=$dbh2->prepare($query2); $stmt->bindParam(':rss_date',$rss_date); $stmt->bindParam(':rss_title',$rss_title); $stmt->bindParam(':rss_url',$rss_url); } catch(PDOException$e) { print"Error!:".$e->getMessage()."<br>"; die(); }         //追加部分(終了)   }//foreach終了 }//while終了 } catch(PDOException$e) { print"Error!:".$e->getMessage()."<br>"; die(); }//catch_end --------------DBへの登録追加(終)---------------------------------- DBへの追加処理を加えると、1個目のRSS記事20個は表示・DBへの登録がされますが、そこで処理が止まってしまっています。 原因を下記のように考えてみました。 1.PDO(セレクト文 while)→ foreach→ PDOのような入れ子になっておりデータベースの切断などに工夫が必要?(いろいろやってみましたが上手くいかないので上記ソースでは$dbh=null;は記載してません) 2.RSSの記事取得のforeachに問題がある。  1個目のRSSは20個の記事があり、20個分はDBに登録できている。21個目を殻で登録しようとしてDBでエラーが出て止まっている可能性があるかもしれない。 (その他疑問点) 上記のようなプログラムの場合、データベース切断はどこに記載すれば良いのか? 1回だけの接続の場合は下記のような形だと思いますが、ループの中に入れ子になったような場合どうすれば良いのでしょうか。 try { } catch(PDOException$e) { print"Error!:".$e->getMessage()."<br>"; die(); }//catch_end $dbh=null;

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • duron
  • ベストアンサー率77% (73/94)
回答No.2

$dbhは$dbh2と分けていますが $stmtはループ内でも同名で使用してるので上書きされ 2回目のwhile($result=$stmt->fetch(PDO::FETCH_ASSOC)) でおかしいことになっているのではないでしょうか

hpmt28
質問者

お礼

duronさん 回答ありがとうございます。 ご指摘の通り $stmtを$stmt2と修正したところプログラムがうまく動きました。 最近PDOを使い始めたのでまだ書式に慣れていなく $stmt=$dbh2->prepare($query2); で1個目の接続と別の接続を作ったつもりになってしまっていました。 何日間か苦戦しましたが、これでやっと前に進めそうです。 ありがとうございました。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

prepareとbindParamはあるのですが、executeはどこにあるのでしょうか?

hpmt28
質問者

補足

ご指摘ありがとうございます。 bindParamの下に$stmt->execute();が必要ですね。 質問用にソースを作った時に抜けてしまいました。

関連するQ&A

  • PDOで接続をechoするとエラーになる現象の対処

    PDOでPHPとMySQLを連動させる時にエラーが出てしまいます。 対処法を教えて下さい。 サーバーの設定(PHP・MySQLなど)が原因のような気がしていますが、自分では解決できません。 PDOでINSERTを繰り返し行っています。 下記のソースでうまく動作をしています。 しかし、ソースの中で $dbh = new PDO($DSN , $DBUSER , $DBPASS); の後に echo $dbh を入れるとエラーになってしまいます。 このプログラムは複数のレンタルサーバーなどで動作が確認できています。 今回新しくVPSを借りてプログラムを設置したら上記のような現象が出てしまいました。 php.ini , my.cnf , httpd.conf などに設定が必要なのでしょうか? 普通にPHPのプログラムは動くのですが、接続 $dbh をecho したときだけエラーになるのです。 環境 PHP:5.1.6 MySQL:5.0.77 //$DNS,$DBUSER,$DBPASSは別途設定し読み込み。 //$nameには次々に名前が入り、1件ずつDBに登録されていく。 foreach($matches as $match) { $name = $match[1]; try { $dbh = new PDO($DSN , $DBUSER , $DBPASS); //echo $dbh; $query=<<<EOF INSERT INTO sample (name) VALUES (:name) EOF; $stmt = $dbh->prepare($query); $stmt->bindParam(':name', $name); $stmt->execute(); } catch(PDOException $e) { print "Error!: " . $e->getMessage() . "<br>"; die(); } }

  • PDOがうまく動かない

    PDOがうまく動かなくて困っています。 $get_id = $_GET['id']; $stmt = $pdo->query("SELECT * FROM table where hoge = ':id'"); $stmt->bindValue(":id",$get_id, PDO::PARAM_STR); $stmt->execute(); if($row = $stmt->fetch()) { echo "あああ"; } $get_id = $_GET['id']; $stmt = $pdo->query("SELECT * FROM table where hoge = '$get_id'"); if($row = $stmt->fetch()) { echo "あああ"; } 2つ目は「あああ」と表示されるのですが、1つ目は何も表示されません。 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • RSSをMYSQLに入れる最適なコードがわからない

    テーブル接続→テーブル作成(必要か不明)→RSSをまとめる→RSSを取得→RSSをテーブルに入れる→RSSを表示をPHPで作成しているのですが、 RSSをテーブルに入れる最適なコードがわからず困っております。 insertを使用してRSSをテーブルに入れたいのですが、INSERT INTOはphpにいきなり書いてもエラーにならないのでしょうか?$を使用するほうの記載のほうが正しいのでしょうか? <?php require_once(dirname(dirname(dirname(dirname( __FILE__ )))) . '/wp-load.php' ); //ファイルの先頭で読み込む try { $dsn = 'mysql:dbname=ozvutmpq_wp1;host=localhost'; $user = 'ozvutmpq_wp1'; $password = 'Rn_&Zi$gWKae'; $dbh = new PDO($dsn,$user,$pass); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//エラーが発生した時に、例外を投げる echo "データベースへの接続が出来ました"; }catch (PDOException $e) { echo $e->getMessage();// err時はメッセージを表示 exit; } //RSSをまとめる $url1 = [ 'http://', 'http://', 'http://',];//フィード登録1次元配列に foreach ($url1 as $url) { //複数のRSSを読み込むには?A.RSSのURLを配列に入れ、その配列をsimplexmlの引数にします。 $count = 0;//初期のカウント //RSSを取得 $rss = simplexml_load_file("$url"); // simplexml_load_file()でRSSをパース解析してオブジェクトを取得します。 $site_title = $rss->channel->title; // RSSタイトル取得 値の代入 自作関数 $post_thumbnail= $rss->channel->thumb; // RSSサムネイル画像取得 値の代入 自作関数 foreach ($rss->item as $item) { // この内側で $item を参照する if ($count >= 8) { break;//8件を超えたとき取得を終了する } $count++; $title = $item->title; // タイトル $link = $item->link; // リンク $thumb = $item->thumb->url; // アイキャッチサムネイル $content = $item ->description;// 詳細、必要なのか不明 date_default_timezone_set("Asia/Tokyo");//日時、タイトルとサムネイル画像だけほしいので要らない気がする $dc = $item ->children('http://purl.org/dc/elements/1.1/');//RSSの情報をPHPで取得するとき、[simplexml_load_file()]関数を使いますが、読み込むファイルの形式が[RSS 1.0]の場合、特殊な処理を施してあげないと正確に取得・表示することができません。 $day = date('Y/m/d H:i',strtotime($dc -> date));// RSS日付け取得 値の代入 自作関数 RSS1.0を取得したい場合「dc」の名前空間は「xmlns:dc="http://purl.org/dc/elements/1.1/"」 と定義されているので、これを引数として指定します。 $key = date('YmdGHis', strtotime($dc -> date));//DB等に入れやすい書式に変換 } } //RSSをテーブルに入れる INSERT INTO rssfeed (title, link, thumb,content)//テーブル名 VALUES ($title, $link,$thumb,$content now()) ON DUPLICATE KEY UPDATE up_date = now(); //名前を独自につける $item_insert_sql = "INSERT INTO $db_database.`rssfeed`(title, link, thumb, content) VALUES ('" . $title . "', '" . $link . "', '" . $thumb . "', '" . $content . "')";//mysql_queryとしてまとめてコードとして使うため?

    • ベストアンサー
    • MySQL
  • PDOでLIKE検索

    LIKE検索でつまづいでいます。 こまめにチェックしながら進めており、エラーが表示されるわけではないのですが、うまくキーが引き渡せていないのが原因だとは思うのですが、どう対策すればいいかというところでつまづいています。 文字コードの指定、直接パラメーターを使わない、プレースホルダの使い方、キーの渡し方等アドバイスをいただけないでしょうか。 ※全件表示だと動作します。また、$keyの中身はきちんと渡っているのは確認できましたが、select文の部分に反映されていないような状態。。。 【検索フォーム】 <form name="" method="POST" action="result.php"> <button type="submit" name="area" value="新宿">新宿</button> </form> 【検索結果】 define('DB_HOST', 'localhost'); define('DB_USER', 'ユーザー名'); define('DB_PASSWORD', 'DBパスワード'); define('DB_NAME', 'DB名'); try { $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD, array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET 'utf8'") ); } catch (PDOException $e) { echo $e->getMessage(); exit; } $key = "%".$_POST['area']."%"; $stmt = $dbh->prepare('SELECT * FROM salon WHERE area LIKE :area'); $stmt->bindParam(':area', $key, PDO::PARAM_STR); $stmt->execute(); ?> <body> <?php foreach ($stmt as $row) : ?> <?php echo htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8'); ?> <?php echo htmlspecialchars($row['area'],ENT_QUOTES,'UTF-8'); ?> <?php endoforeach; ?> </body> アドバイスをいただければ幸いです。

    • ベストアンサー
    • PHP
  • 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
  • mysqlのデータをPDOでDELETEできない

    PDOオブジェクト(PHP)を使用したmysqlのデータ削除について、質問させてください。 PDOオブジェクトを使用して、mysqlのデータ読み込み・削除を行っています。 特定のデータを読み込み、処理を行わせた後、対象のデータの削除をしたいのですが 読み込みは出来るのに、削除で失敗してしまいます。 処理を行わせるSQLをvar_dumpで出力させ、 それを直接phpMyAdminでSQL実行してみたのですが、 問題なく削除が行われています。 SQLの問題ではなく、PHP側の問題だと思うのですが、 解決方法が見つかっておりません。 知恵を貸していただけないでしょうか。 $post_data = explode('¥t', $_POST['data_array']); $user_id = $post_data[0]; $account_name = $post_data[1]; $data_id = $post_data[2]; $gunre_id = $post_data[3]; try { // DB接続 $dbh = new PDO($serverInfo["SERVER"], $serverInfo["USER"], $serverInfo["PASS"]); $dbh -> query('SET NAMES utf8'); // 処理させる対象アカウント情報を取得 $sql_account; $sql_account = 'SELECT * FROM '. $serverInfo['TBL_ACCOUNT']. ' WHERE GUNRE_ID = :gunre'; } $stmt_account = $dbh -> prepare($sql_account); $stmt_account -> bindParam(':gunre', $gunre_id, PDO::PARAM_STR); $stmt_account -> execute(); while($account = $stmt_account -> fetch(PDO::FETCH_ASSOC)) { // 取得してきたデータを使用して処理 // この処理は正常に行われているので、SELECTは正常に行われていると考えられます } // 処理が完了したら、データを削除 // ↓ここで組み立てたSQLを出力し、phpMyAdminでSQL実行すると、データは削除されました $sql_delete = 'DELETE FROM '. $serverInfo['TBL_DATA']. ' WHERE USER_ID = "'. $user_id. '" AND ACCOUNT_NAME = "'. $account_name. '" AND DATA_ID = "'. $data_id. '"'; $stmt_delete = $dbh -> prepare($sql_delete); // ↓元々はbindParamで指定していたのですが、処理が出来なかったので // $SQL_deleteの中に値を埋め込み、処理を行わせました。結局出来なかったのですが・・・ // $stmt_delete -> bindParam(':id', $user_id, PDO::PARAM_STR); // $stmt_delete -> bindParam(':account', $account_name, PDO::PARAM_STR); // $stmt_delete -> bindParam(':data', $data_id, PDO::PARAM_STR); $result = $stmt_delete -> execute(); var_dump($result); // ←出力結果は「false」です } catch (Exception $ex) { echo '<font color="red">システムエラーが発生しました</font><br />'; exit(); } 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • RSSと投稿記事を交互に表示させたい

    内容の修正が必要ですが原因がわかりません 1.投稿に画像やカテゴリーなどが表示されず、タイトルと日付けのみ表示されている 2.RSS画像にURLがついておらず画像のみ表示されている 3.RSSの画像がない場合ダミー画像を表示させたいが書き方が調べてもわからない <?php $dbh = connect_db(); $categories = []; foreach (get_categories() as $category) { $categories[$category->cat_ID] = $category; } function set_other_data($post) { // アイキャッチIDを取得 $post_thumbnail_id = get_post_thumbnail_id($post); // アイキャッチ画像の確認 if ($post_thumbnail_id) { // 存在する $image_src = wp_get_attachment_image_src($post_thumbnail_id); // サムネイルの画像URLを設定 $post->thumbnail = $image_src[0]; } else { // 存在しない $post->thumbnail = 'noimage.jpg'; } // カテゴリーIDを取得 $post->categories = wp_get_post_categories($post->ID); // コメントテキスト if (0 == $post->comment_count) { // コメントなし $post->comments = __('No Comments'); } else { // コメントあり $post->comments = $post->comment_count.'件のコメント'; } // コメントリンク $post->comments_link = get_comments_link($post->ID); } delete_old_rss($dbh);//接続オブジェクトを渡す //RSS保存 $dbh = connect_db();//① $stmt = $dbh->prepare('insert into rss_feed (title, link, date, img) values (?, ?, ?, ?) on duplicate key update title=?, link=?, date=?, img=?');//② $url1 = get_rss_site_url(); foreach ($url1 as $url) { if (($rss = @simplexml_load_file($url)) === false) { continue; } foreach ($rss->item as $item) { $dc = $item->children('dc', true); $date = date('Y-m-d H:i:s', strtotime($dc->date)); if ($date < $delete_date) { continue; } $title = $item->title; $link = $item->link; $content = $item->children('content', true); $result = preg_match('/<img[^>]*src=\"([^"]+)\"[^>]*>/i', $content->encoded, $matches); if (1 == $result) { $img = $matches[1]; } else { $img = ''; } $stmt->execute([$title, $link, $date, $img, $title, $link, $date, $img]); } } if (ctype_digit($_REQUEST['page'])) { $current_page = (int) $_REQUEST['page']; } else { $current_page = 1; } if ($current_page > $wp_query->max_num_pages) { $current_page = $wp_query->max_num_pages; } $block_per_page = 2; $rss_per_block = 18; $posts_per_block = $wp_query->post_count / $block_per_page; //RSS読み込み $rss_per_page = $block_per_page * $rss_per_block; $rss_offset = ($current_page - 1) * $rss_per_page; $sql = 'SELECT * FROM rss_feed ORDER BY date DESC LIMIT ?,?'; $stmt = $dbh->prepare($sql); $stmt->bindParam(1, $rss_offset, PDO::PARAM_INT); $stmt->bindParam(2, $rss_per_page, PDO::PARAM_INT); $stmt->execute(); $rss_items = $stmt->fetchAll(PDO::FETCH_OBJ); $posts_per_page = $block_per_page * $posts_per_block; $posts_offset = ($current_page - 1) * $posts_per_page; $args = [ 'posts_per_page' => $posts_per_page, 'offset' => $posts_offset, ]; $post_items = get_posts($args); //表示 for ($i = 0; $i < $block_per_page; ++$i) { echo '<h2>ブロック</h2>'; echo '<h3>RSS</h3>'; for ($j = 0; $j < $rss_per_block; ++$j) { $item_index = $i * $rss_per_block + $j; if ($item_index >= count($rss_items)) { break; } $item = $rss_items[$item_index]; echo '<ul>'; echo "<li class=\"sitelink\"><a href=\"{$item->link}\">{$item->title}</a></li>"; echo "<li class=\"sitelink\"><a href=\"{$item->link}\">site</a></li>"; echo "<li class=\"sitedate\">{$item->date}</li>"; if (!empty($item->img)) { echo "<li><img src=\"{$item->img}\" width=\"100\"></li>"; } echo '</ul>'; } echo '<h3>投稿</h3>'; for ($j = 0; $j < $posts_per_block; ++$j) { $item_index = $i * $posts_per_block + $j; if ($item_index >= count($post_items)) { break; } $item = $post_items[$item_index]; echo '<ul>';   echo "<li><a href=\"{$item->guid}\">{$item->post_title}</a></li>"; echo "<li>{$item->post_date}</li>"; echo '</ul>'; } }

    • ベストアンサー
    • PHP
  • mysqlについてサンプルなど教えてもらえませんか

    すいません。今phpなどを使いウェブサイトを作っているのですが、データベースがどうしても 必要となり、参考サイトなどを見ながら作りました。 ほとんどできたのですが、最後に一部データベースの関数などでわからない事があり困っています。 (正直私はプログラムはphp程度が少し分かる程度で、データベースも単純な使い方しかしない 予定なので参考サイトをざっと見ただけでmysqlの事がほとんど分かりません) ググってそれらしい物を探してはいるのですが、私がやりたい事はデータベースから 件数を取りたいだけです。 取った件数をphpで表示したいのですが、何時間やっても良くわかりません。 申し訳ないんですが取り出した後その件数をphpのechoで表示するまでをサンプルとして書いてもらえませんか?(可能であれば「ここでこのような処理が行われている」とコメントがもらえると助かります) データベース関係はphpと違って初心者用のサイトなども無く、書いてある事がほとんど分かりません。 (ここでSELECT COUNT(*)を使うと教えてもらったのですが、SELECT COUNT(*)でググっても サンプルなども出てきません) $pdo = new PDO("mysql:dbname=aaa", "root"); $pdo->query("set names utf8;"); // ------------------------------------------------ $sql = $pdo->query("SELECT COUNT(*) FROM bbb"); $stmt = $pdo->query($sql); $stmt->execute(); $count=$stmt->rowCount(); echo $count; ----------------------------------------------- $result = mysql_query("SELECT COUNT(*) FROM bbb"); $row = mysql_fetch_assoc( $result ); echo $row;

    • ベストアンサー
    • MySQL
  • PDOでの検索システムについて

    プログラミング初学者です。 過去に検索システムを作る時にmysqlを使っていましたが、今回PDOを使った簡単な検索の仕組みを作ってみています。 実際に動作確認してみると検索結果で何もでず、var_dumpで確認してみるとNULLとなってしまいます。 いろいろ調べているのですが、PDOを使った場合の検索条件の部分の書き方がイマイチよくわかりません。 そしてだんだん深みにはまって迷走してしまっています。。。 アドバイスをいただけないでしょうか。 【検索フォーム(search.php)】 <form name="" method="POST" action="result.php"> <button type="submit" name="area" value="新宿">新宿</button> </form> 【検索結果(result.php)】 define('DB_HOST', 'localhost'); define('DB_USER', 'ユーザー名'); define('DB_PASSWORD', 'DBパスワード'); define('DB_NAME', 'DB名'); try { $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD); } catch (PDOException $e) { echo $e->getMessage(); exit; } $sql= "select * from shop where area='" . $_POST["area"] . "' "; $shop = array(); foreach ($dbh->query($sql) as $row) { array_push($shop, $row); } ?> <body> <?php foreach ($salon as $row) : ?> <?php echo htmlspecialchars($row['area'],ENT_QUOTES,'UTF-8'); ?> <?php echo htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8'); ?> <?php echo htmlspecialchars($row['station'],ENT_QUOTES,'UTF-8'); ?> <?php endforeach; ?> </body> </html> ※ $sql= "select * from shop where area='" . $_POST["area"] . "' "; の部分に原因があるのかと私は考えています。 $sql= "select * from shop; とした場合は全件表示されるからです。 見難いコードで申し訳ありませんが、アドバイス頂ければ幸いです。

    • ベストアンサー
    • PHP
  • PDOを使用しているのですが・・・

    環境: PostgreSQL7.4 PHP5.2 PDOを使用してデータベースにアクセスして 一旦テーブル名を取得しのちに SELECT文を用いて選択されたテーブルの内容をすべて表示したいのですが テーブルの内容を表示する部分で Fatal error: Call to a member function query() on a non-object と表示されてうまくいきません。 <?php $dns='pgsql:host=;dbname=;user=;password='; try{ $dbh=new PDO($dns); $list = "<option>select</option>\n"; foreach ($dbh->query("SELECT * FROM pg_tables WHERE tableowner='db';", PDO::FETCH_COLUMN,1) as $row) { $arr= array($row); foreach($arr as $value) { $list .= "<option value=\"$value\">".$value."</option>\n"; } } $dbh=null; }catch (PDOException $e){ print 'エラー!: '. $e->getMessage(); die(); } ?> <form action="database.php" method="post"> <P> <select name="test"> <?php echo "$list";?> </select> </P> <input type="submit" value="送信!"> </form> <?php $born = $_POST['test']; $search =$dbh->query("SELECT * FROM $born"); // この部分 echo $search; ?>

    • 締切済み
    • PHP

専門家に質問してみよう