Symfoware

Symfowareについての考察blog

CodeIgniter3でPostgreSQLを使用する

そういえばCodeIgniter3でPostgreSQLに接続したことなかったので試してみます。


ドライバのインストール



接続用のドライバ(php5-pgsql)をインストール
Debian + php5からPostgreSQL 9.3に接続する(php5-pgsql)



database.php



application/config/database.phpを編集。
こんな感じになりました。


  1. $active_group = 'default';
  2. $query_builder = TRUE;
  3. $db['default'] = array(
  4.     'dsn'    => '',
  5.     'hostname' => '192.168.1.104',
  6.     'username' => 'pgadmin',
  7.     'password' => 'P@ssw0rd',
  8.     'database' => 'sample',
  9.     'dbdriver' => 'postgre',
  10.     'dbprefix' => '',
  11.     'pconnect' => FALSE,
  12.     'db_debug' => TRUE,
  13.     'cache_on' => FALSE,
  14.     'cachedir' => '',
  15.     'char_set' => 'utf8',
  16.     'dbcollat' => '',
  17.     'swap_pre' => '',
  18.     'autoinit' => TRUE,
  19.     'encrypt' => FALSE,
  20.     'compress' => FALSE,
  21.     'stricton' => FALSE,
  22.     'failover' => array(),
  23.     'save_queries' => TRUE
  24. );






マイグレーション



せっかくなので、データベースマイグレーション機能を使って
テーブルを作成してみます。

CodeIgniter 3 データベースのマイグレーション(Library Reference - Migrations Class)


application/config/migration.phpを編集。

以下二箇所を変更します。


  1. $config['migration_enabled'] = TRUE;
  2. $config['migration_version'] = 20150217000000;





application/migrationsに「20150217000000_my_table.php」というファイルを作成。
内容はこんな感じにしました。


  1. <?php
  2. defined('BASEPATH') OR exit('No direct script access allowed');
  3. class Migration_My_Table extends CI_Migration {
  4.     public function up() {
  5.         
  6.         // テーブル作成
  7.         $this->dbforge->add_field(array(
  8.             'id' => array(
  9.                 'type' => 'bigserial'
  10.             ),
  11.             'body' => array(
  12.                 'type' => 'text'
  13.             )
  14.         ));
  15.         
  16.         $this->dbforge->create_table('my_table');
  17.         
  18.     }
  19.     public function down() {
  20.         $this->dbforge->drop_table('my_table');
  21.     }
  22. }




application/controllersにマイグレーション用のコントローラー
「Migrate.php」を作成。


  1. <?php
  2. class Migrate extends CI_Controller
  3. {
  4.     public function index()
  5.     {
  6.         $this->load->library('migration');
  7.         if ($this->migration->current() === FALSE)
  8.         {
  9.             show_error($this->migration->error_string());
  10.         }
  11.     }
  12. }




これで準備完了です。
CodeIgniterのindex.phpがあるディレクトリに移動し、
コマンドでマイグレーションを実行してみます。


# php index.php migrate




いい感じでテーブルが作成されました。


sample=# \d
public | migrations     | テーブル | pgadmin
public | my_table        | テーブル | pgadmin
public | my_table_id_seq | シーケンス | pgadmin






簡単なサンプル



簡単にデータの登録や検索を行うプログラムを作成してみます。

application/controllers/Sample.php


  1. <?php
  2. class Sample extends CI_Controller {
  3.     
  4.     function __construct() {
  5.         CI_Controller::__construct();
  6.         
  7.         // データベースに接続
  8.         $this->load->database();
  9.         $this->load->helper('url');
  10.     }
  11.     
  12.     public function index() {
  13.         
  14.         $this->db->select('*');
  15.         $this->db->from('my_table');
  16.         $this->db->order_by('id');
  17.         
  18.         // SQLを実行
  19.         $query = $this->db->get();
  20.         $view_data['list'] = $query->result_array();
  21.         
  22.         $this->load->view('sample', $view_data);
  23.         
  24.         
  25.     }
  26.     
  27.     public function insert() {
  28.         
  29.         $body = $this->input->post('body');
  30.         if ($body) {
  31.             $this->db->insert('my_table', array('body' => $body));
  32.         }
  33.         
  34.         redirect('sample');
  35.         
  36.     }
  37.     
  38.     public function delete($id) {
  39.         
  40.         $this->db->delete('my_table', array('id' => $id));
  41.         
  42.         redirect('sample');
  43.         
  44.     }
  45.     
  46. }




application/views/sample.php


  1. <html>
  2. <head>
  3.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4.     <title>postgresqlテスト</title>
  5. </head>
  6. <body>
  7. <table border="0">
  8.     <thead>
  9.         <tr>
  10.             <th>id</th>
  11.             <th>body</th>
  12.             <th>del</th>
  13.         </tr>
  14.     </thead>
  15.     <tbody>
  16.         <?php foreach($list as $row): ?>
  17.         <tr>
  18.             <td><?php echo $row['id']; ?></td>
  19.             <td><?php echo $row['body']; ?></td>
  20.             <td><a href="<?php echo site_url('sample/delete/' . $row['id']); ?>">delete</a></td>
  21.         </tr>
  22.         <?php endforeach; ?>
  23.     </tbody>
  24. </table>
  25. <form method='post' action="<?php echo site_url('sample/insert'); ?>">
  26.     <input type="text" name="body" id="body" />
  27.     <input type="submit" value="登録" />
  28. </form>
  29. </body>
  30. </html>




http://[サーバーIP]/sampleを表示。

589_01.png


適当に登録してみます。

589_02.png

ちゃんと文字化けせずに登録できたようです。
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/03/09(月) 21:10:51|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<RDS + PostgreSQL 9.3にEC2からプライベートIPで接続 | ホーム | Debian + php5からPostgreSQL 9.3に接続する(php5-pgsql)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1683-6af7deb6
この記事にトラックバックする(FC2ブログユーザー)