スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

MySQLデータベースにデータをぶっこむ

せっかく取得したエロ動画データの$vlistですが、これをそのまま捨ててしまうのはエロ紳士的にもったいないです。

というわけで、今回は取得した$vlistをデータベースに入れる方法をやっていきます。
データベースって何?という説明を簡単にすると、「エクセルの表と同じようなもの」です。

用語をエクセルに置き換えると、
データベース用語エクセル用語
データベースエクセルのファイル
テーブルシート
行、レコード
列、カラム
ユーザーファイルを開けるユーザー
パスワードファイルを開くためのパスワード
という感じですかね。ざっくりと覚えておけば大丈夫です。

データベースはいくつかありますが、MySQLを今回は使います。
(エクセルの他にOpenOffice calcがあるように、データベースもいくつか種類があります。)

ちなみに、$vlistには、以下のようなデータが入っているものとします。


$vlist = [
{
"vurl" : "http://素人のエロ動画URL",
"thum" : "http://素人のエロ動画サムネイルURL",
"title" : "素人の隠し撮りパラダイス"
},
{
"vurl" : "http://ロリロリ動画URL",
"thum" : "http://ロリロリ動画サムネイルURL",
"title" : "ロリータ of コンプレックス"
},
{
"vurl" : "http://アニメパロディ動画URL",
"thum" : "http://アニメパロディ動画サムネイルURL",
"title" : "バキュームフェラリーテール"
}
];

PHPには、データベースを操作する機能がはじめから用意されています。
PDOという名前で、PHP Data Objectsの略です。
これはとても便利な機能で、MySQLだけでなく、様々なデーターベースでも使えます。

便利!というだけあって、使い方も簡単です。
PDOの使い方
今回も、ソースに注釈を入れてみます。

$dbname = "データベース名";
$dbuser = "データベースユーザー";
$dbuserpass = "データベースユーザーのパスワード";

/*PDOを使い、データベースに接続*/
$pdo = new PDO("mysql:dbname=$dbname;host=localhost",$dbuser,$dbuserpass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"
));
/*PDOを使い、データベースを操作*/
$pdo->exec("データベースを操作するSQL文を記述");

/*PDOを削除し、データベースを切断*/
$pdo = null;

ざっくりと説明すると、

PDOデータ = new PDO(データベース, ユーザー名, パスワード, オプション);

という感じですね。オプションで文字コードを指定し、日本語も入るようにしてます。
見て分かる通り、SQL文はデータベースを操作する命令ですが、これもちゃんと覚えるのは先で大丈夫です。Google先生にやりたいことを聞けば教えてくれるからです。
例えば、

「MySQL データ 追加したい」

と検索すれば、INSERT INTO等のSQL文を教えてくれます。

実際にデータベースに入れる方法
$vlistに入ったデータを実際にデータベースに挿入するソースを書きます。

$insert_values = array();
foreach ($vlist as $item) {
$question_marks[] = '(?,?,?)';
$inItem = array($item['vurl'], $item['thum'], $item['title']);
$insert_values = array_merge($insert_values,$inItem);
}
$sqlStr = "INSERT IGNORE INTO vlist (`url`, `thum`, `title`) VALUES " . implode(',', $question_marks);

$sql = $pdo->prepare($sqlStr);
$sql->execute($insert_values);

これまた複雑になりました。
foreachのところで何をやっているかというと、SQL文を作る準備をしてます。
行を挿入するSQL文は

INSERT INTO テーブル名 (列の名前1, 列の名前2...) VALUES (データ1, データ2...)

という命令になりますので、これをforeachループでたくさん行っても大丈夫です。
自分用ですし。
でも、1回のSQL文で一気に複数行追加する方法もあり、

INSERT INTO テーブル名 (列の名前1, 列の名前2...) VALUES (1行目データ1, 1行目データ2...), (2行目データ1, 2行目データ2...), (3行目データ1, 3行目データ2...)

と、後ろにたくさん付けるだけです。
ですので、SQLを1回で済まそうと、若干複雑なことをしてるんですね。
ちなみにIGNOREはエラーがあっても無視する指定です。同じエロ動画のURLを入れようとしたら通常エラーで停止してしまいますが、これを入れれば無視されるようになります。url列で同じデータを許さない指定にした場合の話ですが。例えば、どこかのエロ動画サイトの「人気の動画」を集めるように書いた場合、何度も同じ動画を集めちゃう対策ですね。

今回初めて出てきた関数の説明をしますと、
array_mergeは配列を合体される関数で、implodeは配列を指定した文字で結合する関数です。
pdo->executeは、配列を指定するとSQL文の「?」を一つずつ配列のデータに置き換えてくれます。

それを踏まえた上でざっくりと解説すると、

$inItem = array($item['vurl'], $item['thum'], $item['title']);
$insert_values = array_merge($insert_values,$inItem);

の部分は単純に、$vlistの全データをURL、サムネイル、タイトルの順番で繰り返す配列を作ってます。

それと同じ数、
$question_marks[] = "(?,?,?)";
をして、
implode(',', $question_marks);
とすれば、
「(?,?,?),(?,?,?),(?,?,?)」
みたいな文字列が出来上がります。

「.」というのは、PHPで文字と文字をくっつける記号です。
結果、

INSERT IGNORE INTO vlist (`url`, `thum`, `title`) VALUES (?,?,?),(?,?,?),(?,?,?)

という文字列が出来上がり、prepareに渡されます。
そして、executeで配列を指定し、良い感じなSQL文に直されて実行されるわけです。

うーん、なんだか突然難易度アップした気がする・・・と心配したブラザー、気にすることはありません。別にテストも無ければ、怒られることもありません。自分のエロのためにやっているのです。初心者向けにPHPを1から動かすやり方は、近いうちに解説します。
そしたらソースをコピペして、まずはエロ動画を集めるPHPを動かしてみましょう。それを部分的に変更し、自分の好きなサイトの動画一覧を取得出来たら、面白くなってきますよ!!

次回は、MySQLデータベースについて少し触れておこうと思います。
関連記事

コメントの投稿

非公開コメント

プロフィール

エロぺんぎん

管理人:エロぺんぎん
不純な動機でプログラマーになった男、エロぺんぎんです。ブラザー達を猛烈に応援したい気持ちと、自分もプログラマーとして成長したい思いで、当ブログを立ち上げました。
エロぺん動画を運営しております。

検索フォーム
Twitter
最新記事
最新コメント
カテゴリ
リンク
RSSリンク
エロぺん動画で人気の動画
人気の記事
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。