最終更新日:
公開日:
レシピ
データベース PostgreSQL
PostgreSQLにデータを新規登録する:INSERT
PostgreSQLデータベースのテーブルへ新しくデータを登録する方法について、「PostgreSQL関数」と「PDO」の2パターンを解説します。
この記事のポイント
- PostgreSQLのデータ登録はPostgreSQL関数を使う方法と、PDOを使う方法がある
目次
テーブルへデータを新規登録
今回はテーブルへ新しいデータを登録していきます。
PostgreSQLのデータベースに新しくデータを登録する方法は、以下の3つが用意されています。
- pg_query関数にSQL文を渡して登録する
- pg_insert関数に登録するデータを配列で渡して登録する
- PDOにSQL文を渡して登録する方法
ここでは解説用に「カフェのメニュー」を題材にして、次のようなテーブルがあることを想定して進めていきます。
カラム名 | 型 | その他 |
---|---|---|
id | INT(11) | 主キー |
name | VARCHAR(20) | |
price | INT(11) | |
modify_datetime | DATETIME | |
create_datetime | DATETIME |
「id」はデータを管理するための一意となるID、「name」と「price」はメニュー名と価格、そして最後の2つはデータ更新日と登録日を示します。
データの登録方法について、「PostgreSQL関数」と「PDO」の2通りの方法を確認していきます。
pg_query関数にSQL文を渡してデータを登録する
まずはpg_query関数を使ってデータを登録する方法から解説していきます。
それでは早速コードを見ていきましょう。
コード例
<?php
// 変数の初期化
$res = null;
$pg_conn = null;
$sql = null;
$date = null;
// タイムゾーンの初期化と日付の取得
date_default_timezone_set('Asia/Tokyo');
$date = date("Y-m-d");
// データベースと接続
$pg_conn = pg_connect("host=localhost port=5432 dbname=test user=testuser password= testtest");
if( $pg_conn ) {
// データを登録するためのSQLを作成
$sql = "INSERT INTO menu (
id, name, price, modify_datetime, create_datetime
) VALUES (
1, 'ドリップコーヒー', 400, '$date', '$date'
)";
// SQLクエリ実行
$res = pg_query( $pg_conn, $sql);
var_dump($res);
} else {
var_dump("接続できませんでした");
}
// データベースの接続を切断
pg_close($pg_conn);
成功した場合は次のように出力され、失敗した場合はfalseが出力されます。
実行結果
resource(3, pgsql result)
実際に登録されたデータの内容を、コマンドを使って確認してみましょう。
WindowsのPowerShellやコマンドプロンプト(Macではターミナル)を起動し、PostgreSQLの「psql データベース名」コマンドを実行してください。
赤い部分が入力するコードです。
コマンドの入力例
# psql test
データベースのコマンド入力モードに移ったら、次のSELECT文を打ち込んで実行してください。
コマンドの入力例
test=# SELECT * FROM menu;
データの登録が成功した場合は、次のように表示されます。
出力された内容から「ドリップコーヒー」のデータが登録されていることが確認できました。
PostgreSQLデータベースへの接続する部分までは、別記事「PostgreSQLデータベースへ接続」と同じ内容です。
肝心な「// データを登録するためのSQLを作成」以降に続くSQL文をする部分では、実際に登録するデータを含めたSQL文を記述します。
データ登録を行うにはINSERT文
を使いますが、その基本ルールは次の形です。
このSQL文を$sqlに格納し、pg_query関数で実行しています。
その結果が$resに格納され、最後にvar_dump関数で出力するという流れになっています。
pg_query関数についてより詳しくはphp.netの下記ページをご覧ください。
pg_query関数 – php.net
pg_insert関数に配列を渡してデータを登録する
PostgreSQL関数を使ってデータ登録するもう1つの方法は、pg_insert関数に登録するデータを配列で渡して新しくデータを登録する方法です。
コード例
<?php
// (1)変数の初期化
$res = null;
$pg_conn = null;
$sql = null;
$date = null;
// (2)タイムゾーンの初期化と日付の取得
date_default_timezone_set('Asia/Tokyo');
$date = date("Y-m-d");
// (3)データベースと接続
$pg_conn = pg_connect("host=localhost port=5432 dbname=test user=testuser password= testtest");
if( $pg_conn ) {
$data = array(
'id' => 2,
'name' => 'カフェ・オレ',
'price' => 480,
'modify_datetime' => $date,
'create_datetime' => $date
);
// (4)データを登録
$res = pg_insert( $pg_conn, 'menu', $data);
} else {
var_dump("接続できませんでした");
}
// (5)データベースの接続を切断
pg_close($pg_conn);
pg_insert関数の返り値は、先述したpg_query関数と同様です。
成功した場合は次のように出力され、失敗した場合はfalseが出力されます。
実行結果
resource(3, pgsql result)
今回もコマンドを使って登録されたデータの内容を確認してみると、以下のように登録したデータが出力されます。
「カフェ・オレ」のデータが登録されていることが確認できました。
pg_insert関数は3つの必須パラメータがあります。
1つ目は「データベースとの接続オブジェクト」、2つ目はデータを登録する「テーブル名」、3つ目は登録するデータが入った配列です。
3つ目の配列は、テーブル構造のカラム名(フィールド名)と値がセットになった連想配列になります。
先のコードだと、例えば「name」には「カフェ・オレ」が入り、「price」には「480」が登録されるように配列を宣言しています。
pg_insert関数についてより詳しくはphp.netの下記ページをご覧ください。
pg_insert関数 – php.net
PDOでデータを新規登録
PDOでデータを登録する場合は、データ登録のSQL文を作成して、queryメソッドで実行して行います。
PDOオブジェクトのインスタンス作成、データベースへの接続については別記事「PostgreSQLデータベースへ接続」で解説している内容と同じコードです。
早速コードをみていきましょう。
コード例
<?php
// (1)変数の初期化
$res = null;
$pdo_conn = null;
$sql = null;
$date = null;
// (2)現在の日付を取得
date_default_timezone_set('Asia/Tokyo');
$date = date("Y-m-d");
try {
// (3)データベースと接続
$pdo_conn = new PDO( 'pgsql:host=localhost; dbname=test;', 'testuser', 'testtest' );
// (4)データを登録するためのSQLを作成
$sql = "INSERT INTO menu (
id, name, price, modify_datetime, create_datetime
) VALUES (
3, 'ソイラテ', 400, '$date', '$date'
)";
// (5)SQLクエリ実行
$res = $pdo_conn->query( $sql);
var_dump($res);
} catch(PDOException $e) {
var_dump($e->getMessage());
}
// (6)データベースの接続を切断
$pdo_conn = null;
成功した場合は次のように実行したSQL文が出力され、失敗した場合はfalseが出力されます。
「// データを登録するためのSQLを作成」以降の、SQL文を作成するところが重要になります。
SQL文自体は、汎用性の高いデータ登録を行うためのINSERT文です。
そのため、MySQLなど他のデータベースを使った経験のある方にはお馴染みかもしれません。
もちろん、このSQL文はPostgreSQLに関わらず、その他のデータベースでも使うことが可能です。
登録されたデータを確認しておきましょう。
コマンドの入力例
# psql test
データベースのコマンド入力モードに移ったら、次のSELECT文を入力して実行します。
コマンドの入力例
test=# SELECT * FROM menu;
以下のように、新しくデータ登録したデータを含めたテーブルの内容が表示されます。