Cloud9でMySQLを使う

  • 49
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Cloud9でDB接続するやり方を毎回ggってるのでメモ。

Terminal側での処理

まずは起動
$ mysql-ctl start

mysql> の入力画面にする
$ mysql-ctl cli

新規DBや新規テーブルの作成はTerminalから直接SQL叩けばOK
※phpMyadminもインストールできる
$ phpmyadmin-ctl install
Setting Up PHPMyAdmin

ちなみにphpMyadminのURIは
https://[workspace名]-[UserName].c9users.io/phpmyadmin/index.php

PHP側からDBを使う

    $servername = getenv('IP');
    $username = getenv('C9_USER');
    $password = "";
    $database = "使用するDB名";
    $dbport = 3306;

    // Create connection
    $db = new mysqli($servername, $username, $password, $database, $dbport);
    $db->set_charset('utf8');

    // Check connection
    if ($db->connect_error) {
        die("Connection failed: " . $db->connect_error);
    } 

Setting Up MySQL

ここまでを自分の環境に合わせれば問題なく利用できます。

以下は自分の覚書的な感じです。

PDOで接続

普段使ってるpdoのクラスを使いまわしたいので私は大体こうです。

define.php
<?php
include_once 'pdoclass.php';

$servername = getenv('IP');
$username = getenv('C9_USER');
$password = "";
$database = "DB名";
$dbport = 3306;

// DB接続
$conDB  = new DB($servername, $dbport, $database, $username, $password);

// 時刻設定
// どうやってもcloud9上で時刻設定ができなかったので全ファイルでincludeするここに書いた
date_default_timezone_set('Asia/Tokyo');

オプションの設定がアレなのは実環境がPHP5.2.4なせいですorz

pdoclass.php
<?php
/**
 * Class DB
 */
class DB {

  protected $pdo;
  protected $stmt;

  /**
   * @param $host
   * @param $dbname
   * @param $user
   * @param $password
   */
  public function __construct($host, $port, $dbname, $user, $password ) {
    try {
      $this->pdo = new PDO("mysql:host=".$host.";port=".$port.";dbname=".$dbname, $user, $password ,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
      $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
      $this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
      $this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
      $this->pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);
    } catch (Exception $e) {
      print "エラー!!:". $e->getMessage() . "<br/>";
    }

    return $pdo;
  }

  /**
   * @param $sql
   * @return array $stmt
   */
  function pdoQuery($sql){
    $stmt = $this->pdo->query($sql);
    foreach ($stmt as $row) {
      $res[] = $row;
    }

    return $res;
  }

  /**
   * @param string $sql
   * @param array  $arr
   * @param int    $mode SELECTの時は1,それ以外の時は2
   *
   * @return array $stmt
   */
  function pdoPrepare($sql,$arr,$mode){
    $stmt = $this->pdo->prepare($sql);
    foreach ($arr as $key => $val) {
      $k = $key+1;
      if(is_int($val)){
          $val = (int)$val;
          $stmt->bindValue($k,$val,PDO::PARAM_INT);
      }else{
          $val = (string)$val;
          $stmt->bindValue($k,$val,PDO::PARAM_STR);
      }
    }

    $stmt->execute();

    if($mode == 1){

      foreach ($stmt as $row) {
        $res[] = $row;
      }

      return $res;

    }else{

      return true;
    }

  }


}