【Heroku】Potgresを操作 + PHPから接続

「何が書いてあるの?」

・Herokuにデータベースを作る

コマンドプロンプトからHerokuのデータベースを操作

PHPで作成したデータベースに接続、レコードを取得

 

「どんな人向け?」

・Herokuでデータベース使ってPHPで値を取得したい人向け

 

・HerokuでWebページ公開できるようにしておく必要があります

まだの人はこちらへ

kikiworld.hatenablog.com

 

*コマンドは

> コマンド

で記載

 

Heroku CLIPostgreSQL をインストールする

(もしかしたらPostgreSQLは必要じゃないかも)

 

〇データベース作成方法と接続方法(SQLを打てるようにする) 

HerokuのPersonal > アプリ名

のResources > Add-ons からHeroku Postgresを追加する

 

コマンドプロンプトを起動

Herokuのgitをremoteで登録してないなら

> git remote add 『名前』 『URL』

でHerokuのgitを登録しておく

 

わからないなら

> git remote -v

で一覧表示して確認

 

> heroku pg:psql

でデータベースに接続

この時、git remoteが複数登録してあるとエラーになるかも

エラーになった場合

> git remote -vで一覧を表示し、

いらないremoteを

> git remote remove 『名前』

で削除する

 

正常に接続できるとコマンドプロンプトの表示が変わって

アプリ名::DATABASE=>

という感じになる

 

ここにSQL文を打てばOK

まずはCREATE TABLEとかでテーブル作る

セミコロン(;)でSQLを送信する

これをしないとHeroku側で実行されない

 

とりあえずテスト用に

SQL> create table test(id serial, name varchar(10));

と打ってテーブル作成

 

SQL> insert into 『テーブル名(今回はtest』 (『列名(今回はname』)values(『値』);

(コピペ用> insert into test (name) values ('ほげ');  )

で何個かレコードを追加していく

『ほげ』の部分はテキトーに変えてください

 

SQL> select * from test;

でテーブルを表示して確認

 

f:id:xukiki:20180804033138p:plain

こんな感じになります

 データベースの操作は以上なので

> \q

で終了

 

PHPからPostgreSQLに接続

さっきのHerokuの画面のResourceのAdd-onsにあるHeroku Postgresをクリック

Overview | Durability | Setting

のSettingをクリック

 

View Credentials...をクリック

f:id:xukiki:20180804030537p:plain

赤丸のとこ

 

そしたらなんかいろいろ表示される

 

f:id:xukiki:20180804031645p:plain

 

テキトーなエディタでPHPファイルを作成

 

さっきのHerokuの画面の情報を以下のコードに入れてく

赤色の部分以外はコピペでOK。下の方で説明します

<?php

  /* Herokuの画面を参考に情報を入力 */

  $host = 'Hostのとこ';

  $database = 'Databaseのとこ';

  $user = 'Userのとこ';

  $password = 'Passwordのとこ';

 

  /* Postgresに接続。できなかったらエラー */

  $link = pg_connect('host='.$host.' dbname='.$database.' user='.$user.' password='.$password);

  if(!$link){
    die(pg_last_error());
  }

 

  $sql = 'select * from test;';
  $result = pg_query($link, $sql);
  $num = pg_numrows($result);
 

  for($cnt = 0; $cnt < $num; $cnt++){
    $rec = pg_fetch_row($result, $cnt);
    echo'<p>id: '.$rec[0].' name: '. $rec[1].'</p>';
  }

 

  /* 接続を閉じる */
  pg_close($link);
?>

とりあえず

> git push 『名前』 master

ソースコードをHerokuにプッシュ

アプリを確認してみるとデータベースに入れたデータが表示されるはず

 

**コードの説明**

$sqlに送信したいSQL文を入れておく

 

・pg_query($link, $sql);

$sqlのクエリを実行する

このコードでは$resultに実行した結果が入ってる

 

・pg_nomrows($result);

クエリを実行して返ってきた行の数

このコードではfor文を回すのに使ってる

 

・pg_fetch_row($result, $row);

$resultに入ってる結果の$rowで指定した行のレコードを配列で取り出す

このコードでは行数文ループして$recにレコードを代入してる

 

今回はテーブル作成の時にidとnameの2行で作ったので

$rec[0]にidの値が、$rec[1]にnameの値が入ってる

 

pg_fetch_assocでも取り出せることができ、

その場合、列名をキーとした連想配列として取り出すことができる

例)

$rec = pg_fetch_assoc($result, $row);

echo $rec["id"];  // id列の値を表示

echo $rec["name"];  // name列の値を表示