【Heroku】Potgresを操作 + PHPから接続
「何が書いてあるの?」
・Herokuにデータベースを作る
・コマンドプロンプトからHerokuのデータベースを操作
・PHPで作成したデータベースに接続、レコードを取得
「どんな人向け?」
・Herokuでデータベース使ってPHPで値を取得したい人向け
・HerokuでWebページ公開できるようにしておく必要があります
まだの人はこちらへ
*コマンドは
> コマンド
で記載
Heroku CLI と PostgreSQL をインストールする
(もしかしたら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とかでテーブル作る
これをしないと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;
でテーブルを表示して確認
こんな感じになります
データベースの操作は以上なので
> \q
で終了
〇PHPからPostgreSQLに接続
さっきのHerokuの画面のResourceのAdd-onsにあるHeroku Postgresをクリック
Overview | Durability | Setting
のSettingをクリック
View Credentials...をクリック
赤丸のとこ
そしたらなんかいろいろ表示される
テキトーなエディタで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にプッシュ
アプリを確認してみるとデータベースに入れたデータが表示されるはず
**コードの説明**
・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列の値を表示