カゴヤのVPSサーバーの環境にて PostgreSQLをインストールしてPHPでPDO接続を試してみます。
PostgreSQLのインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// yumにより PostgreSQLをインストールします。 $ sudo yum -y install postgresql-server // pgsql他 バージョン確認 $ cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) $ httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Apr 24 2019 13:45:48 $ php -v PHP 7.0.33 (cli) (built: Jul 2 2019 18:38:15) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.33, Copyright (c) 1999-2017, by Zend Technologies $ psql --version psql (PostgreSQL) 9.2.24 |
PostgreSQL初期設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
// PostgreSQL初期設定 // pdo接続のための pdo-pgsqlをインストールします。 // ここで、phpは 「remi-php70.repo」 よりインストールしてます。 // phpのバージョンに合わせた php-pgsql をインストールします。 $ sudo yum --enablerepo=remi-php70 install -y php-pgsql // 確認 $ php -i | grep 'PDO' PDO PDO support => enabled PDO drivers => mysql, pgsql, sqlite // pgsqlを確認 PDO Driver for MySQL => enabled PDO Driver for PostgreSQL => enabled // 確認 PDO Driver for SQLite 3.x => enabled // pgsqlの初期化 /var/lib/pgsql/dataに設定ファイルなどが配置します。 postgresql-setup initdb // postgresql.confの修正 $ sudo vi /var/lib/pgsql/data/postgresql.conf // 他のホストからのアクセスする場合 listen_addresses = '*' // ログ出力コメントアウトして以下に修正 log_line_prefix = '%t %u %d ' // PostgreSQL 起動 $ sudo systemctl start postgresql $ systemctl enable postgresql // pg_hba.confの修正します。 // ident: DB の所有者がシェルを実行している OS のユーザ名と一致するかで認証 // md5: PW 認証 (MD5-hashed) // trust: 認証せず、DB への接続許可 (PW スルー) $sudo vi /var/lib/pgsql/data/pg_hba.conf ・ ・ local all all md5 host all all 127.0.0.1/32 md5 host all all ::1/128 ident // 起動 [root@xxxx ~]# systemctl start postgresql [root@xxxx ~]# systemctl enable postgresql |
ユーザーを作成、データベース作成テスト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
// 管理者のパスワード、ユーザー登録 [root@xxxx ~]# su - postgres -bash-4.2$ psql -c "alter user postgres with password 'password'" ALTER ROLE // ユーザーの設定 -bash-4.2$ createuser dbuser パスワード: xxxxxx // 管理者パスワードを入力で ユーザー作成 // dbuserのパスワードを設定 -bash-4.2$ psql -c "alter role dbuser with password 'dbuser'" パスワード: xxxxxx // 管理者パスワードを入力で alter roleを実行 ALTER ROLE // 所有者 dbuser が所有するデータベース firstdb を作成 -bash-4.2$ createdb firstdb -O dbuser パスワード: // 登録されているデータベースの一覧を表示 -bash-4.2$ psql -l パスワード: データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権 -----------+-----------+------------------+-------------+-------------------+----------------------- firstdb | dbuser | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 行) // 作成したユーザーで psqlにログイン -bash-4.2$ psql -U dbuser firstdb ユーザ dbuser のパスワード: psql (9.2.24) "help" でヘルプを表示します. firstdb=> // firstdb に table 作成 firstdb=> create table user_table ( no int,id text, name text ); CREATE TABLE // テーブル一覧表示 firstdb=> \dt リレーションの一覧 スキーマ | 名前 | 型 | 所有者 ----------+------------+----------+-------- public | user_table | テーブル | dbuser (1 行) // 作成されたテーブルのフィールド一覧 firstdb=> \d user_table テーブル "public.user_table" 列 | 型 | 修飾語 ------+---------+-------- no | integer | id | text | name | text | firstdb=> // データ挿入 firstdb=> insert into user_table (no,id,name) values (1,'khagiwara','萩原賢二'); INSERT 0 1 firstdb=> insert into user_table (no,id,name) values (2,'tarou','テスト太郎'); INSERT 0 1 firstdb=> insert into user_table (no,id,name) values (3,'hanako','テスト花子'); INSERT 0 1 firstdb=> select * from user_table; no | id | name ----+-----------+------------ 1 | khagiwara | 萩原賢二 2 | tarou | テスト太郎 3 | hanako | テスト花子 (3 行) |
PostgreSQLのデータベースをPDOでデータ参照
テストで作成したデータベース「user_table」をPDO経由で参照して表示しています。
キャプチャーです。
SQL: select * from user_table;
サンプルページのソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $dsn = 'pgsql:dbname=firstdb'; $user = 'dbuser'; $password = 'dbuser'; try{ $dbh = new PDO($dsn, $user, $password); $stmt = $dbh->query("select * from user_table"); $users = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "<pre>"; print_r( $users ); echo "</pre>"; }catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } |