ベンチャー営業マンの米国株投資

UCLA卒の筆者が主に米国の株投資に関して投稿していきます。 40歳までに(現在28歳)アーリーリタイアを目指して、仕事に投資に没頭していきます

PHPのPDOクラスを使ってMySQLにデータを保存・抽出

この記事について 

PHPを使ってデータベース内にデータを保存したり、取り出したりする際の手順をメモしています。  細かいところは色々と省いています。

まずは使用するデータベースの作成

以下でまずはデータベースの準備をします。 

mysql -u root
→Mysqlへログイン

create database hogehoge_db;
→データベースの作成

grant all on hogehoge_db.* to dbuser@localhost identified by 'hugahuga';
→dbuser@localhostに対してhogehoge_dbというデータベースへの権限を与えて、 パスワードはhugahugaにする

use hogehoge_db;
→操作するデータベースを選択

create table users (
  id int not null auto_increment primary key,
  name varchar(255),
  score int
);
→テーブルを作成

mysql -u dbuser -p dotinstall_db
→パスワード付きで作成したデータベースへアクセス

トライとキャッチを使ってデータベースへ接続

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)に関しては以下のURLを参考にいたしました。 要はエラーがでて、例外がthrowされた時にエラーメッセージを出すことができるオプションらしいです。 決まり文句だと思って記述しています。

参考URL: http://takuya-1st.hatenablog.jp/entry/20110907/1315372181

<?php

define('DB_DATABASE', 'hogehoge_db');
define('DB_USERNAME', 'dbuser');
define('DB_PASSWORD', 'hugahuga');
define('PDO_DSN', 'mysql:host=localhost;dbname=' . DB_DATABASE);
#PDOを作成する為に必要な情報を定数として用意
#mysql:dbhost=localhosはデータベースの場所
#dbname=' . DB_DATABASEはデータベースの名前

try {
  #PDOの引数に以下を設定し、データベースとの接続を行う
  $db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch (PDOException $e) {
  echo $e->getMessage();
  exit;
}
#エラーが出た時はエラーメッセージを表示し、処理を終える

execを使ってテーブルにデータを挿入 

さて、データベースへの接続の用意はできたのでexecメソッドを使ってデータを挿入

try {
  // connect
  $db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  // insert
  $db->exec("insert into users (name, score) values ('ROGER', 55)");
  echo "user added!";
 # execメソッドを使ってデータを挿入
} catch (PDOException $e) {
  echo $e->getMessage();
  exit;
}

prepare,bindvalue,executeを使ってデータを挿入

prepareでSQL分を準備し、bindvalueで値をセットし、executeで実行します。

try {
  $db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  $stmt = $db->prepare("insert into users (name, score) values (?, ?)");

  $name = 'Roger';
  $stmt->bindValue(1, $name, PDO::PARAM_STR);
#prepareで用意された1つ目の?に対して値をセットし、データの型はSTRを指定している
  $score = 23;
  $stmt->bindValue(2, $score, PDO::PARAM_INT);
#prepareで用意された2つ目の?に対して値をセットし、データの型はINTを指定している
  $stmt->execute();

} catch (PDOException $e) {
  echo $e->getMessage();
  exit;
}

queryメソッドを使って挿入されたデータを取得し、表示する

さて、挿入はできましたので、次はデータベースに保存されているデータを取得し、表示することをしたいと思います。 データベースのデータを取得するメソッドにはqueryとfetchAllを利用します。

try {
  // connect
  $db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  // select all
  $stmt = $db->query("select * from users");
#queryを使ってSQLを発行します
  $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
#SQLを発行した後、ステートメントオブジェクトが持つfetchAllメソッドを使い全件抽出しています。引き数にはFETCH_ASSOCを利用し、連想配列になるように取得しています。
  foreach ($users as $user) {
    var_dump($user);
  }
#返り値が配列となって返ってきているので、 繰り返し処理で1つづつ取り出していきます。 
  echo $stmt->rowCount() . " records found.";
#rowCountメソッドを使っていくつのレコードを取得したかを表示しています。

} catch (PDOException $e) {
  echo $e->getMessage();
  exit;
}

おまけ

念のためphpのビルドインサーバーを立ち上げ方法も書いておきます。

ip a
→マシーンのIPアドレスを調べることができるコマンド
PDOに関しては他にも色々ありますが、上記を組み合わせれば基本的なフォームの処理は実現できるとおもいます。

php -S [ip aで調べたアドレス]:[ポート番号]
→ビルドインサーバの立ち上げ。 その後はブラウザで確認

PDOは他にも色々ありますが、 上記のメソッドを組み合わせれば色々と処理ができるかと思います。 

qiitaにも投稿しています。

URL: 

qiita.com

DatePeriodクラスを使ってカレンダーに必要な値を取得

DatePeriodクラスを使って日付のレンジを指定

DatePeriodクラスを使うことによって、日付のデータをまとめて取得することができる。 

$period = new DatePeriod(
   new DateTime('first day of this month'),
   new DateInterval('P1D'),
   new DateTime('first day of next month')
);
//今月の月初から月末までの日付データを取得することができる

第1引数ではDateTimeクラスを使っていつの日付からデータを取得するか指定、第2引数ではDateIntervalクラスを使って何日間隔で日付データを取るかを指定、そして第3引数では同じくDateTimeクラスを使って、いつまでの日付を取得するかを指定しています。 

第3引数がnext monthになっている理由は、’last day of this month’にしてしまうと、月末日を取得できない為です。 なので月内の日付を全て取得したい場合は、上記のように書きます。 

DateTimeオブジェクト操作する 

繰り替えし処理を使い日付データを取り出していきます。

foreach($period as $day){
   echo $day->format('d');
}
//0102030405060708091011121314151617....

formatはDateTimeクラスに用意されているメソッドになっており、決められた書式でデータを返してくれる。 

公式サイトにまとまっているので、以下を参考に引数を設定してあげればいい。

formatに関する公式サイト

qitaでも投稿しています。 

qiita.com