X
pm studio world wide news pj club
pm studio world wide news pj club
news, tech, music, film, sports, cg, translation, photo uploader
  • 2016-02-14
  • PJ Club
  • Creating and Using Database in MySQL with PDO / PDOを使ったMySQLデータベースへの接続と基本操作
  • 最近、ビッグデータやクラウドサーバー等の言葉をよく耳にしますが、これらは基本的にデータベースを基準に構築されています。
    今回のPJ Clubは、データベースの構築、アクセス方法です。
    データベースには、多くのレンタルーサーバーで標準提供されているMySQLを利用します。
    データベースと聞くと難しく感じますが、Excel等で作る住所録と同じです。構造は基本的に配列です。
    簡単なアーティストのデータベースサンプルを作ってみます。
    データベース名はartist_dataとし、データのテーブルを「artist」、id (番号)、category (ジャンル)、name (アーティスト名)、song (曲名)、video (ビデオのURL)、view (データの表示・非表示)を要素とします。
    Excelだとこんな感じです。



    これをPHPで配列にすると、下記のようになります。

    $id=array("1", "2", "3", "4");
    $category=array("pop", "countory", "hip-hop", "rock");
    $name=array("Katy Perry", "Taylor Swift", "Rihanna", "Adele");
    $song=array("Firework", "Shake It Off", "FourFiveSeconds", "Hello");
    $video=array("https://www.youtube.com/watch?v=QGJuMBdaqIw",
              "https://www.youtube.com/watch?v=nfWlot6h_JM",
              "https://www.youtube.com/watch?v=kt0g4dWxEBo",
              "https://www.youtube.com/watch?v=YQHsXMglC9A");
    $view=array("0","0","1","1");
    $artist =array("id"=>$id, "category"=>$category, "name"=>$name, "song"=>$song, "video"=>$video, "view"=>$view);

    この$artistにある要素を抽出する事で、データ内容を知る事が出来ます。
    記述されたスクリプトをデータベース名「artist_data.php」で保存するとデータベースの出来上がりです。
    サンプルのようにデータが4つぐらいであれば、記述も楽でいいのですが、100件や1000件となると大変です。MySQLのような専用データベースソフトはその点を簡単に実現してくれます。
    PHPでMySQLにアクセスするには「mysql_connect」関数を使用します。しかし、「mysql_connect」関数、「pg_connect」関数は、PHP 5.5以降非推奨となり廃止されるようです。
    そこで、PHP 5.1以降から、PDO (PHP Data Objects)と言うクラスオブジェクトが標準装備になりました。
    これまでMySQLやPostgreSQL等、データベースによってアクセス関数を書き換えていましたが、PDOによって同じ記述で異なったデータベースにアクセス出来るようになりました。今後は、このPDOが推奨となります。
    それでは、PDOを使用してデータベースを構築します。

    1. データベースを作成

    まず、MySQLへアクセスするID(ユーザー)とパスワードを確認してください。多分、初期のIDはrootではないかと思います。
    MySQLにはまだ、データベースがありませんからデータベースを作成します。データベース名は「artist_data」とします。
    下記は初期状態でのPHPスクリプト記述です。

    <?php
         $host="mysql:host=localhost"; //MySQLのあるホスト名
         $root="MySQLへの初期ID";
         $root_password="MySQLへの初期パスワード";

         $user="新規ユーザーID";
         $pass="新規ユーザーパスワード";
         $dbname="artist_data"; //データベース名、今回は「artist_data」

         try{
              $pdo = new PDO($host, $root, $root_password);
              $pdo->exec("CREATE DATABASE $dbname;
                  CREATE USER '$user'@'localhost' IDENTIFIED BY '$pass';
                  GRANT ALL ON $dbname.* TO '$user'@'localhost';
                  FLUSH PRIVILEGES;");
         } catch (PDOException $e) {
              print('Error:'.$e->getMessage());
              die();
         }
    ?>

    すでに、登録ユーザーとパスワードを設定している場合は、新規でユーザー作成する必要がありませんから、下記のように記述します。

    <?php
         $host="mysql:host=localhost"; //MySQLのあるホスト名
         $user="登録ユーザーID";
         $pass="登録ユーザーパスワード";
         dbname="artist_data"; //データベース名、今回は「artist_data」

         try{
              $pdo = new PDO($host, $user, $pass);
              $pdo->exec("CREATE DATABASE $dbname;");
         } catch (PDOException $e) {
              print('Error:'.$e->getMessage());
              die();
         }
    ?>

    2. テーブルを作成

    サンプルデータベース「artist_data」のテーブルを作成します。
    テーブルの名前は「artist」、テーブルの各要素は「id」、「category」、「name」、「song」、「video」、「view」とします。
    「id」には数値の整数がはいりますので、データ型は、INTで11桁とします。「category」は文字列が入りますのでデータ型はVARCHARを使い、255文字まで有効にします。「name」、「song」も同様にデータ型はVARCHARにします。「video」にはURLの文字列が入りますのでデータ型はTEXTにします。VARCHARとTEXTの違いは文字数です。URLの場合、パラメータ付きであったりすると文字数が多くなるためTEXTを選択しています。「view」では、0か1の数字1文字を入れます。0で表示、1で非表示とし、データ型はCHARで1文字、デフォルトは0とします。

    <?php
         //MySQLへアクセス
         $host="mysql:dbname=artist_data;host=localhost"; //MySQLのあるホスト名とデータベース名、今回は「artist_data」
         $user="登録ユーザーID";
         $pass="登録ユーザーパスワード";
         $tablename="artist";

         try{
              $pdo = new PDO($host, $user, $password);
         }catch (PDOException $e){
              print('Error:'.$e->getMessage());
              die();
         }
         //テーブル作成
         $sql = "CREATE TABLE IF NOT EXISTS $tablename(id INT(11) NOT NULL PRIMARY KEY, category VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, song VARCHAR(255) NOT NULL, video TEXT NOT NULL , view CHAR(1) DEFAULT 0)";
         $st = $pdo->prepare($sql);
         $st->execute();
    ?>

    これで、データベースの基礎ができました。
    テーブルの作成が、スクリプトだと分かりにくい場合、「phpMyAdmin」を使用すると視覚的で簡単だと思います。
    サーバーにインストールされていれば、MySQLへの登録ID、パスワードでアクセスできます。もし、インストールされていなければ、SSHでサーバーへアクセスし「yum install phpmyadmin」とタイプすればインストール出来ます。
    SSHが使用出来ない場合、「phpMyAdmin」はPHPファイルですから、下記のURLから「phpMyAdmin」一式をダウンロードし、FTPでサーバーにアップすれば動作します。

    https://www.phpmyadmin.net/
  • 3. テーブルにデータ入力

    「artist_data」のテーブル「artist」にデータを入力します。データは、HTMLのフォームから送信します。
    送信されたデータを受信するスクリプですが、まず、MySQLにPDOでアクセスします。
    データベースへアクセスする度に同じスクリプトを記述するのは、大変ですから、アクセス用のPHPファイルとして下記のスクリプを「config.inc.php」として保存しておきます。
    このPHPファイルをrequire_once("PHPファイル名")関数で呼び出すようにします。パスは相対パスです。
    スクリプトは下記のようになります。

    <?php
         $host="mysql:dbname=artist_data;host=localhost"; //MySQLのあるホスト名とデータベース名、今回は「artist_data」
         $user="登録ユーザーID";
         $pass="登録ユーザーパスワード";

         try{
              $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); //日本語使用にための文字設定
              $pdo = new PDO($host, $user, $password, $options);
              $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
         }catch (PDOException $e){
              print('Error:'.$e->getMessage());
              die();
         }
    ?>

    上記のスクリプトでいくつか注意点があります。まず、日本語の問題です。文字コードはUTF-8なのですが、データ入力、保存すると文字化けが起こる時があります。
    そこで、文字化けを回避する文字設定をします。下記は、PHPのバージョンがPHP5.3.6以前の場合です。

    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");

    PHP5.3.6以上であれば、

    $options = array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET 'utf8'");

    または、

    $host="mysql:dbname=artist_data;host=localhost;charset=utf8;";

    とします。上記のように$hostで設定する場合、$optionsはいりません。
    次にデータを入力します。
    フォームからcategotu (ジャンル)、name (アーティスト名)、song (曲名)、video (ビデオのURL)、view (表示/非表示)を送信します。
    テーブルで設定したIDですが、データが入力されると自動的に生成されますから、送信時にIDはいりません。
    テーブルに入力する場合、prepare( )関数のINSERT INTOを使用します。テーブル要素名が5つですから、下記のようになります。

    $pdo->prepare("INSERT INTO テーブル名(テーブル要素名1,テーブル要素名2,テーブル要素名3,テーブル要素名4,テーブル要素名5)VALUES(?,?,?,?,?)");

    今回、テーブル名は「artist」、要素名がcategory (ジャンル),、name (アーティスト名)、song (曲名)、video (ビデオのURL)、view (表示/非表示)ですので

    $pdo->prepare("INSERT INTO artist(category, name, song, video, view)VALUES(?,?,?,?.?)");
    $st->execute(array("ジャンル","アーティスト名","曲名","ビデオのURL","表示/非表示"));

    となります。まとめると下記のようになりますので、HTML部分も含めてPHPファイルで保存します。

    <?php
         //MySQLへアクセス
         require_once('config.inc.php');

         //フォームからのデータ受信
         if($_SERVER["REQUEST_METHOD"] != "POST"){
         } else {
              $artistCategory =htmlspecialchars($_POST['artistCategory'],ENT_QUOTES);
              $artistName =htmlspecialchars($_POST['artistName'],ENT_QUOTES);
              $artistSong =htmlspecialchars($_POST['artistSong'],ENT_QUOTES);
              $artistVideo =htmlspecialchars($_POST['artistVideo'],ENT_QUOTES);
              $artistView =htmlspecialchars($_POST['artistView'],ENT_QUOTES);

              //フォームからの送信データの有無の確認
              $check=array($artistCategory, $artistName, $artistSong, $artistVideo, $artistView);
              foreach ($check as $value){
                  if(!isset($value) || $value===""){
                      //データが無かったエラー
                      $errorMSG="ERROR";
                      break;
                  }
              }
              //テーブルへデータ入力
              if(!$errorMSG){
                  $st = $pdo->prepare("INSERT INTO artist(catrgory, name, song, video, view)VALUES(?,?,?,?.?)");
                  $st->execute(array($artistCategory,$artistName, $artistSong, $artistVideo, $artistView));
              }
         }
    ?>
    //HTML部分
    <form action="データ入力用のPHPファイル名">
              <input id="artistName" type="text" name="artistCatrgpry">
              <input id="artistName" type="text" name="artistName">
              <input id="artistSong" type="text" name="artistSong">
              <input id="artistVideo" type="text" name="artistVideo">
              <input id="artistView" type="text" name="artistView">
              <input id="submit" type="submit" name="send" value="send">
    </form>

    4. テーブルのデータ書き換え

    一度、記録したデータを書き換えるには、prepare( )関数のUPDATE SETを使用します。

    $pdo->prepare("UPDATE テーブル名 SET 書き換えたいテーブル要素名=? WHERE 対象テーブル行の要素名=?");
    例えば、id番号を対象として、曲名とビデオのURLを書き換えたい場合、下記のように記述します。

    $st = $pdo->prepare("UPDATE artist SET song=?, video=? WHERE id=?");
    $st->execute(array("曲名", "ビデオURL", "id番号"));

    PHPのスクリプトは下記のようになります。

    <?php
         //MySQLへアクセス
         require_once('config.inc.php');

         //フォームからのデータ受信
         if($_SERVER["REQUEST_METHOD"] != "POST"){
         } else {
              $artistID =htmlspecialchars($_POST['artistID'],ENT_QUOTES);
              $artistSong =htmlspecialchars($_POST['artistSong'],ENT_QUOTES);
              $artistVideo =htmlspecialchars($_POST['artistVideo'],ENT_QUOTES);

              //フォームからの送信データの有無の確認
              $check=array($artistID, $artistSong,$artistVideo,);
              foreach ($check as $value){
                  if(!isset($value) || $value===""){
                      //データが無かったエラー
                      $errorMSG="ERROR";
                      break;
                  }
              }
              //テーブルのデータ書き換え
              if(!$errorMSG){
                  $st = $pdo->prepare("UPDATE artist SET song=?, video=? WHERE id=?");
                  $st->execute(array($artistSong, $artistVideo, $artistID));
              }
         }
    ?>
    //HTML部分
    <form action="データ書き換え用のPHPファイル名">
         <input id="artistID" type="text" name="artistID">
         <input id="artistSong" type="text" name="artistSong">
         <input id="artistVideo" type="text" name="artistVideo">
         <input id="submit" type="submit" name="send" value="send">
    </form>

    5. テーブルのデータ削除

    記録したデータを削除する場合、prepare( )関数のDELETE FROMを使用します。

    $st = $pdo->prepare("DELETE FROM テーブル名 WHERE 対象となるテーブル行の要素名=?");

    例えば、id番号を対象としてデータを削除する場合、

    $st = $pdo->prepare("DELETE FROM artist WHERE id=?");
    $st->execute(array("id番号"));

    となります。PHPのスクリプトは下記のように記述します。

    <?php
         //MySQLへアクセス
         require_once('config.inc.php');

         //フォームからのデータ受信
         if($_SERVER["REQUEST_METHOD"] != "POST"){
         } else {
              $artistID =htmlspecialchars($_POST['artistID'],ENT_QUOTES);

              //フォームからの送信データの有無の確認
              $check=array($artistID);
              foreach ($check as $value){
                  if(!isset($value) || $value===""){
                      //データが無かったエラー
                      $errorMSG="ERROR";
                      break;
                  }
              }
              //テーブルのデータ書き換え
              if(!$errorMSG){
                  $st = $pdo->prepare("DELETE FROM artist WHERE id=?");
                  $st->execute(array($artistID));
              }
         }
    ?>
    //HTML部分
    <form action="データ削除用のPHPファイル名">
         <input id="artistID" type="text" name="artistID">
         <input id="submit" type="submit" name="send" value="send">
    </form>
  • 6. テーブルのデータ表示

    データ入力が終了したところで、記録したデータを表示してみます。まず、全データの表示です。
    データを呼び出すには、prepare( )関数のSELECTを使用します。

    $st = $pdo->query("SELECT * FROM テーブル名");
    $st->fetch();

    上記は、入力されたデータ順(古いもの順)で表示されます。もし、最新のデータから表示したいのであれば、prepare( )関数のORDER BY テーブル要素名 DESCを使用します。

    $st = $pdo->query("SELECT * FROM テーブル名 ORDER BY id DESC");
    $st->fetch();

    とします。データ表示は、テーブルの行毎になります。行は$rowとしています。

    foreach ($st as $row){
         $テーブル要素データ= htmlspecialchars($row['テーブル要素名']);
    }

    まとめると、

    <?php
         //MySQLへアクセス
         require_once('config.inc.php');
         //データ抽出
         $st = $pdo->query("SELECT * FROM artist ORDER BY id DESC");
         $st->fetch();
         foreach ($st as $row){
              $artistID = htmlspecialchars($row['id']);
              $artistCategory = htmlspecialchars($row['name']);
              $artistName = htmlspecialchars($row['name']);
              $artistSong = htmlspecialchars($row['song]);
              $artistVideo = htmlspecialchars($row['video]);
              $artistView = htmlspecialchars($row['view]);
         }
    ?>

    これで、全データを抽出しましたが、まだHTML表示されてません。LIタグを利用し、HTML出力を追加してみます。

    <?php
         //MySQLへアクセス
         require_once('config.inc.php');
         //データ抽出
         $st = $pdo->query("SELECT * FROM artist ORDER BY id DESC");
         $st->fetch();
         foreach ($st as $row){
              $artistID = htmlspecialchars($row['id']);
              $artistCategory = htmlspecialchars($row['name']);
              $artistName = htmlspecialchars($row['name']);
              $artistSong = htmlspecialchars($row['song]);
              $artistVideo = htmlspecialchars($row['video]);
              $artistView = htmlspecialchars($row['view]);
              //HTML作成
              $artsitData .="<ul>
                                <li>$artistID</li>
                                <li>$artistCategory</li>
                                <li>$artistName</li>
                                <li>$artistSong</li>
                                <li>$artistVideo</li>
                                <li>$artistView</li>
                </ul>";
         }
         echo $artsitData;
    ?>

    7. テーブルの部分データ表示

    全データ表示ではなく、必要な件数だけを表示したい時があります。
    prepare( )関数のORDERにはlimitがあり、これを利用すると必要な件数を取得出来ます。下記は最新データ3件の取得です。

    $st = $pdo->query("SELECT * FROM テーブル名 ORDER BY id DESC limit 件数");

    さらに、データの何番目から何件と指定も出来ます。ただし、行数の始めは0です。1ではありません。1行目から3件のデータを取得したい場合、下記のようになります。

    $offset=0;//始まりの行番号
    $getNumber=3;//表示件数
    $st = $pdo->query("SELECT * FROM テーブル名 ORDER BY id DESC limit $offset, $getNumber");

    <?php
         //MySQLへアクセス
         require_once('config.inc.php');
         //データ抽出
         $offset=0;;//始まりの行番号
         $getNumber=3;//表示件数
         $st = $pdo->query("SELECT * FROM artist ORDER BY id DESC limit $offset, $getNumber");
         $st->fetch();
         foreach ($st as $row){
              $artistID = htmlspecialchars($row['id']);
              $artistCategory = htmlspecialchars($row['name']);
              $artistName = htmlspecialchars($row['name']);
              $artistSong = htmlspecialchars($row['song]);
              $artistVideo = htmlspecialchars($row['video]);
              $artistView = htmlspecialchars($row['view]);
              //HTML作成
              $artsitData .="<ul>
                                      <li>$artistID</li>
                                      <li>$artistCategory</li>
                                      <li>$artistName</li>
                                      <li>$artistSong</li>
                                      <li>$artistVideo</li>
                                      <li>$artistView</li>
                                </ul>";
         }
         echo $artsitData;
    ?>

    8. テーブルの指定データ表示

    指定したデータだけを表示したい場合、prepare( )関数のWHEREを使用します。

    $st = $pdo->query("SELECT * FROM テーブル名 WHERE 指定テーブル要素名=?");

    今回のサンプルは、表示/非表示を「0」(表示)、「1」(非表示_と設定していますから、「0」と指定されたデータを取得してみます。
    スクリプトは下記のようにします。

    $artistView="0";
    $st = $pdo->prepare("SELECT * FROM artist WHERE view=?");
    $st->execute(array($artistView));

    まとめると、

    <?php
         //MySQLへアクセス
         require_once('config.inc.php');
         //データ抽出
         $artistView="0";
         $st = $pdo->prepare("SELECT * FROM artist WHERE view=?");
         $st->execute(array($artistView));
         foreach ($st as $row){
              $artistID = htmlspecialchars($row['id']);
              $artistCategory = htmlspecialchars($row['name']);
              $artistName = htmlspecialchars($row['name']);
              $artistSong = htmlspecialchars($row['song]);
              $artistVideo = htmlspecialchars($row['video]);
              $artistView = htmlspecialchars($row['view]);
              //HTML作成
              $artsitData .="<ul>
                                      <li>$artistID</li>
                                      <li>$artistCategory</li>
                                      <li>$artistName</li>
                                      <li>$artistSong</li>
                                      <li>$artistVideo</li>
                                      <li>$artistView</li>
                                </ul>";
         }
         echo $artsitData;
    ?>

    9. テーブルの条件設定指定データ表示 AND OR

    条件設定をしたデータを表示する場合、prepare( )関数のAND、または、ORを使用します。ANDは指定要素1と指定要素2が合致した場合、ORは指定要素1または指定要素2のどちらかが合致した場合となります。

    AND
    $st = $pdo->prepare("SELECT * FROM テーブル名 WHERE 指定要素1=? AND 指定要素2=?");
    $st->execute(array("指定データ1", "指定データ2"));

    OR
    $st = $pdo->prepare("SELECT * FROM テーブル名 WHERE 指定要素1=? OR 指定要素2=?");
    $st->execute(array("指定データ1", "指定データ2"));

    例えば、音楽ジャンルがカントリーで、表示指定「O」のデータを取得したい場合、下記のようにします。

    <?php
         //MySQLへアクセス
         require_once('config.inc.php');
         //データ抽出
         $artistCategory="country";
         $artistView="0";
         $st = $pdo->prepare("SELECT * FROM artist WHERE category=? AND view=?");
         $st->execute(array($artistCategory, $artistView));
         foreach ($st as $row){
              $artistID = htmlspecialchars($row['id']);
              $artistCategory = htmlspecialchars($row['name']);
              $artistName = htmlspecialchars($row['name']);
              $artistSong = htmlspecialchars($row['song]);
              $artistVideo = htmlspecialchars($row['video]);
              $artistView = htmlspecialchars($row['view]);
              //HTML作成
              $artsitData .="<ul>
                                      <li>$artistID</li>
                                      <li>$artistCategory</li>
                                      <li>$artistName</li>
                                      <li>$artistSong</li>
                                      <li>$artistVideo</li>
                                      <li>$artistView</li>
                                </ul>";
         }
         echo $artsitData;
    ?>

    新しいデータ順に表示したい場合は、先のORDER BYと組み合わせます。

    $st = $pdo->prepare("SELECT * FROM artist WHERE category=? AND view=? ORDER BY id DESC");

    とすれば、新しいデータから表示されます。

    10. データの検索

    データを検索し、検索結果を表示させたい場合があると思います。
    prepare( )関数のLIKEと%を使用すると、ある程度曖昧な部分一致の検索が出来ます。ただ、本当の意味での曖昧検索ではありませんから、厳密に検索したい場合、正規表現を使用する方がいいと思います。

    $st = $pdo->prepare("SELECT * FROM テーブル名 WHERE テーブル要素名 LIKE?");
    $st->execute(array("%検索テキスト%"));

    例えば、アーティスト名で検索したい場合、下記のようになります。

    <?php
         //MySQLへアクセス
         require_once('config.inc.php');
         //フォームからデータ受信
         $artistName=htmlspecialchars($_POST['artistName'],ENT_QUOTES);
         if(!isset($artistName) || $artistName===""){
              //データが無かったエラー
              $errorMSG="ERROR";
         }

         if(!$errorMSG){
              $findArtist="%".$artistName."%";
              $st = $pdo->prepare("SELECT * FROM artist WHERE name LIKE?");
              $st->execute(array($findArtist));
              foreach ($st as $row){
                  $artistID = htmlspecialchars($row['id']);
                  $artistCategory = htmlspecialchars($row['name']);
                  $artistName = htmlspecialchars($row['name']);
                  $artistSong = htmlspecialchars($row['song]);
                  $artistVideo = htmlspecialchars($row['video]);
                  $artistView = htmlspecialchars($row['view]);

                  $artsitData .="<ul>
                                        <li>$artistID</li>
                                        <li>$artistCategory</li>
                                        <li>$artistName</li>
                                        <li>$artistSong</li>
                                        <li>$artistVideo</li>
                                        <li>$artistView</li>
                                      </ul>";
              }
              echo $artsitData;
         }
    ?>
    //HTML部分
    <form action="データ検索のPHPファイル名">
         <input id="artistName" type="text" name="artistName">
         <input id="submit" type="submit" name="send" value="send">
    </form>

    PDOはシンプルな記述でデータベースへアクセスできる便利なツールです。
    今回紹介したのは基礎的なものですが、もっと詳しく知りたいと思われる方は、下記のURLにアクセスするとマニュアルが掲載されています。

    日本語
    http://php.net/manual/ja/book.pdo.php
    英語
    http://php.net/manual/en/book.pdo.php
  • source : pm studio world wide news
Recent Post
Latest News
Billboard Hot 100
Top 10
  • No.1
    Girls Like You
    Maroon 5 & Cardi B
  • No.2
    Sicko Mode
    Travis Scott
  • No.3
    Happier
    Marshmello & Bastille
  • No.4
    Lucid Dreams
    Juice WRLD
  • No.5
    Better Now
    Post Malone
  • No.6
    Youngblood
    5 Seconds Of Summer
  • No.7
    Zeze
    Kodak Black, Travis Scott & Offset
  • No.8
    Sunflower
    Post Malone & Swae Lee
  • No.9
    Shallow
    Lady Gaga & Bradley Cooper
  • No.10
    MIA
    Bad Bunny & Drake
BBC Radio 1 Singles 40
Top 10
  • No.1
    Thank U, Next
    Ariana Grande
  • No.2
    Shallow
    Lady Gaga & Bradley Cooper
  • No.3
    Woman Like Me
    Little Mix & Nicki Minaj
  • No.4
    Promises
    Calvin Harris & Sam Smith
  • No.5
    Let You Love Me
    Rita Ora
  • No.6
    Happier
    Marshmello & Bastille
  • No.7
    Guiding Light
    Mumford & Sons
  • No.8
    Funky Friday
    Dave & Fredo
  • No.9
    Sunflower
    Post Malone & Swae Lee
  • No.10
    Without Me
    Halsey
  • Editor: Toshio Maeoka / pm studio
    pm studio world wide news © 2014-2018 . All Rights Reserved
^
to TOP