PDOで置き換えてみた

naohiro19
記事: 256
登録日時: 15年前
住所: 愛知県

PDOで置き換えてみた

投稿記事 by naohiro19 » 9年前

http://note.chiebukuro.yahoo.co.jp/detail/n13873]ahoo!知恵袋と知恵ノートのRSSデータを取得するツール(PHP+MySQL) - Yahoo!知恵袋にあるPHPのプログラムをすべてPDOに置き換えてみました。

CODE:

データベースの選択に失敗しました。";
    exit;
}
mysql_set_charset('utf8', $mysql_connect);
*/
function h($s)
{
    return htmlspecialchars($s, ENT_QUOTES, "UTF-8");
}

try {
    //
    $pdo = new PDO('mysql;host=' . $database_server . ';dbname=' . $database_name . ';charset=utf8', $database_user,
        $database_password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
} catch (PDOException $e) {
    echo $e->getMessage();
    exit;
}

//--------------------------------------------------------------//
// 新たにデータベースを作成する場合の処理 //
//--------------------------------------------------------------//

if (filter_input(INPUT_GET, 'create') && filter_input(INPUT_GET, 'create') == "database") {
    $create = "CREATE TABLE rss_chienote (
id INT NOT NULL AUTO_INCREMENT,
keyword TEXT NOT NULL,
PRIMARY KEY (id)) ENGINE = MYISAM";
    $pdo->exec($create);
//    $sql = mysql_query($create, $mysql_connect);
}

//--------------------------------------------------------------//
// テーブルの有無を確認する //
//--------------------------------------------------------------//
$select = "select * from rss_chienote";
$result = $pdo->query($sql)->fetchAll(PDO::FETCH_LAZY);
//$sql = mysql_query($select, $mysql_connect);
if (!$result) {
    echo '新たにテーブルを作成する';
    exit;
}

//--------------------------------------------------------------//
// RSSのキーワードを追加設定する //
//--------------------------------------------------------------//
if (filter_input(INPUT_POST, 'keyword')) {
    $keyword = mb_convert_encoding($_POST['keyword'], "UTF-8", "UTF-8,EUC-JP,SJIS,Shift_JIS,ASCII");
//キーワードの重複がないか確認する

    $select = "select * from rss_chienote where keyword = :keyword";
    $stmt = $pdo->prepare($select);
    $stmt->bindValue(":keyword", filter_input(INPUT_POST, 'keyword'));
    $result = $stmt->fetchAll(PDO::FETCH_LAZY);
    if ($result['keyword'] != $keyword) {
        $insert = "INSERT INTO rss_chienote (keyword) VALUES (:keyword)";
        $stmt = $pdo->prepare($insert);
        $stmt->bindValue(':keyword', filter_input(INPUT_POST, 'keyword'));
//        $sql = mysql_query($insert, $mysql_connect);
        if (!$sql) {
            echo 'データベースへの保存に失敗しました。';
        }
    } else {
        echo 'そのキーワードは既に登録されています。';
    }
}
//--------------------------------------------------------------//
// RSSのキーワードを削除する //
//--------------------------------------------------------------//
if ($get = filter_input(INPUT_GET, 'delete')) {
    $delete = "delete from rss_chienote where keyword = :keyword";
    $stmt = $pdo->prepare($delete);
//    $sql = mysql_query($delete, $mysql_connect);
    $sql = $stmt->execute();
    if (!$sql) {
        echo 'データの削除に失敗しました。';
    }
}
//--------------------------------------------------------------//
// データベースからキーワード一覧を取得する //
//--------------------------------------------------------------//
$keywords = [];
$select = "select * from rss_chienote";
//$sql = mysql_query($select, $mysql_connect);
$result = [];
foreach ($pdo->query($select) as $row) {
    array_push($result, $row);
}
//while ($result = mysql_fetch_array($sql)) {
//    $keywords[] = mb_convert_encoding($result['keyword'], "UTF-8", "UTF-8,EUC-JP,SJIS,Shift_JIS,ASCII");
//}
//--------------------------------------------------------------//
// HTML、キーワードの設定フォーム //
//--------------------------------------------------------------//
?>



    
    
        body {
            line-height: 25px;
        }

        .top {
            text-align: center;
        }

        .keyword_list {
            float: left;
            margin-top: 50px;
            width: 20%;
        }

        .table {
            margin-top: 20px;
            font-size: 90%;
            border: 1px #000000 solid;
        }

        .list {
            margin: 0px;
            text-align: center;
            border-top: 1px #000000 solid;
            background-color: #CCCC66;
        }

        .rss_data {
            margin-top: 30px;
            float: right;
            width: 79%;
        }

        .rss_keyword {
            border-bottom: 1px #000000 solid;
            border-left: 10px #000000 solid;
            padding: 5px;
        }

        .rss_keyword a {
            text-decoration: none;
            color: #000000;
        }

        .rss_keyword a:hover {
            text-decoration: underline;
            color: #00F;
        }
    
    RSSで知恵ノートのデータを取得するツールのサンプル――Lifelong Learning Web



    RSSで知恵ノートのデータを取得するツール(サンプル)
    
    
        キーワード:
        
    

';
echo '';
echo 'キーワード一覧';
echo '';
if (count($keywords) != 0) {
    foreach ($keywords as $one) {
        if ($one != filter_input(INPUT_GET, 'keyword_list') && $one != filter_input(INPUT_POST, 'keyword')) {
            echo '' . $one . '';
        } else {
            echo '';
            echo '' . h($one) . '';
            echo '(削除する)';
            echo '';
        }
    }
} else {
    echo 'キーワードなし';
}
echo '';
echo '';
echo '';
//--------------------------------------------------------------//
// RSSデータを取得する //
//--------------------------------------------------------------//
echo '';
if (count($keywords) > 0) {
    if (filter_input(INPUT_GET, 'keyword_list') || filter_input(INPUT_POST, 'keyword')) {
        if (filter_input(INPUT_GET, 'keyword_list')) {
            $this_keyword = filter_input(INPUT_GET, 'keyword_list');
        }
        if (isset($_POST['keyword'])) {
            $this_keyword = filter_input(INPUT_POST, 'keyword');
        }
    } else {
        $this_keyword = $keywords[0];
    }
    $url = "http://chiebukuro.search.yahoo.co.jp/rss?p=" . urlencode($this_keyword) . "&fr=common-navi&class=2&dnum=0&ei=UTF-8";
    $xml = simplexml_load_file($url);
    $count = 0;
    foreach ($xml->channel->item as $entry) {
        $entrydate = date("Y.m.d", strtotime($entry->pubDate));
        echo 'link) . '" target="_blank">' . h($entry->title) . '';
        $strong_keyword = "" . h($this_keyword) . "";
        $description = str_replace($this_keyword, $strong_keyword, $entry->description);
        echo '' . h($description) . '';
        echo '';
        echo 'categoryUrl) . '" target="_blank">' . h($entry->category) . '';
        echo ' 投稿日:' . h($entrydate);
        echo ' link) . '" target="_blank">本文を読む >>';
        echo '';
        $count++;
        if ($count > 4) {
            break;
        }
    }
} else {
    echo 'キーワードを設定してください。';
    echo ' キーワードが一つも設定されていません。上記のフォームよりキーワードを入力してください。';
}
echo '';

//----------------------------------------------------- //
// データベース切断処理 //
//----------------------------------------------------- //
/*$mysql_close = mysql_close($mysql_connect);
if (!$mysql_close) {
    echo "データベースとの切断に失敗しました。";
    exit;
}
*/
$pdo = null;
?>


コメントはまだありません。