LoginSignup
7
6

More than 5 years have passed since last update.

Heroku上のPHPからPDOでMySQL(ClearDB)に接続する

Last updated at Posted at 2019-01-14

MySQLiではなくPDOを使う場合

Heroku Dev Centerでは、PHPでMySQLを使う場合の例として、MySQLiで接続するサンプルコードが記載されています。

<?php
$url = parse_url(getenv("CLEARDB_DATABASE_URL"));

$server = $url["host"];
$username = $url["user"];
$password = $url["pass"];
$db = substr($url["path"], 1);

$conn = new mysqli($server, $username, $password, $db);
?>

これに対し、MySQLiではなくPDOを使う場合のサンプルコードを以下に記載します。

<?php
$url = parse_url(getenv("CLEARDB_DATABASE_URL"));

$server = $url["host"];
$username = $url["user"];
$password = $url["pass"];
$db = substr($url["path"], 1);

$pdo = new PDO(
  'mysql:host=' . $server . ';dbname=' . $db . ';charset=utf8mb4',
  $username,
  $password,
  [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
  ]
?>

【おまけ】ローカルの開発環境とHeroku環境で接続先のDBを切り分ける

ローカルの開発環境でのみ、下記のPHPファイルと同じディレクトリにisDevelopment.txt(中身は空で良いです)を配置することで、

  • Heroku環境ではHeroku上のMySQLに
  • 開発環境では開発環境のMySQLに

接続するようにしています。

function new_pdo(){

  $filename = './isDevelopment.txt';

  if (!file_exists($filename)){

    //For Heroku
    $url = parse_url(getenv('CLEARDB_DATABASE_URL'));

    $server = $url["host"];
    $username = $url["user"];
    $password = $url["pass"];
    $db = substr($url["path"], 1);

    $pdo = new PDO(
      'mysql:host=' . $server . ';dbname=' . $db . ';charset=utf8mb4',
      $username,
      $password,
      [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
      ]
    );
    return $pdo;

  }else{

    //For development
    $pdo = new PDO(
      'mysql:localhost;dbname=testdb;charset=utf8mb4',
      'root',
      'root',
      [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
      ]
    );
    return $pdo;

  }
}

なお、.gitignoreには/isDevelopment.txtと記述して、isDevelopment.txtがHerokuにデプロイされないようにしておきます。

参考

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6