Symfoware

Symfowareについての考察blog

Debian + CodeIgniter 3でSQL Server 2016に接続する

Debian 8から素のPHPでSQL Server 2016に接続できました。

Debian + PHP 5.6からSQL Server 2016へ接続する
Debian + PHP 5.6からSQL Server への接続で日本語が文字化けする場合の対応


CodeIgniter 3を用いての接続を試してみます。



database.php



接続情報の設定ファイルであるdatabase.phpの記載はこのようになりました。


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




適当にテーブルを検索して表示してみます。


  1. <?php
  2. class Test extends CI_Controller {
  3.     
  4.     public function index() {
  5.         
  6.         $this->load->database();
  7.         
  8.         $rows = $this->db->get('日本語テーブル')->result_array();
  9.         
  10.         var_export($rows);
  11.         
  12.     }
  13. }





特にエラーもなく実行できました。


# php index.php test
array (
0 =>
array (
    '番号' => 12,
    '日本語フィールド1' => '日本語の値',
),
1 =>
array (
    '番号' => 50,
    '日本語フィールド1' => '日本語を登録',
),
)






PDOによる接続



PDOによる接続指定はこのようになりました。


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




ただし、データベース接続時に警告が発生します。


A PHP Error was encountered

Severity:    Warning
Message:     PDO::__construct(): SQLSTATE[IM001]: Driver does not support this function: driver does not support setting attributes
Filename:    /var/dev/php/ci3/system/database/drivers/pdo/pdo_driver.php
Line Number: 133




どうやら、PDO::ATTR_PERSISTENTのオプションをサポートしていないようで、
system/database/drivers/pdo/pdo_driver.phpを微調整しました。


※2017/3/23追記

CI 3.0.7で修正されたようです。
現在、このエラーは発生しないはず。
PDO_DBLIB alway show warning #4674






  1.     public function db_connect($persistent = FALSE)
  2.     {
  3.         if ($this->subdriver !== 'dblib') {
  4.             $this->options[PDO::ATTR_PERSISTENT] = $persistent;
  5.         }
  6.         try
  7.         {
  8.             return new PDO($this->dsn, $this->username, $this->password, $this->options);
  9.         }
  10.         catch (PDOException $e)
  11.         {
  12.             if ($this->db_debug && empty($this->failover))
  13.             {
  14.                 $this->display_error($e->getMessage(), '', TRUE);
  15.             }
  16.             return FALSE;
  17.         }
  18.     }



関連記事

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

  1. 2016/06/21(火) 23:18:07|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Jenkins 2系インストール後、初回起動で「Unlock Jenkins」 | ホーム | Debian + PHP 5.6からSQL Server への接続で日本語が文字化けする場合の対応>>

コメント

コメントの投稿


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

トラックバック

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