ITエンジニアSAIの技術関連備忘録

技術的な内容を忘れないようにメモ....

FuelphpでMySQL接続について

1.環境

 
2.テスト用のデータベースを用意する

 
mysql> CREATE DATABASE sampledb;
 
確認する
 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sampledb           |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
 
 
3.テスト用のテーブルを用意する

 
mysql> create table sampledb.person_info(id int not null primary key auto_increment, name varchar(50), age varchar(3), seibetu varchar(3), address varchar(255));
 
今回のテスト用テーブル構造は以下
 
mysql> show columns from person_info;
 
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| name    | varchar(50)  | YES  |     | NULL    |                |
| age     | varchar(3)   | YES  |     | NULL    |                |
| seibetu | varchar(3)   | YES  |     | NULL    |                |
| address | varchar(255) | YES  |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
 
テストデータのDML
insert into sampledb.person_info(name, age, seibetu, address) values ("test1", "20", "0", "tokyo shibuyaku");
insert into sampledb.person_info(name, age, seibetu, address) values ("test2", "23", "1", "tokyo chuouku");
insert into sampledb.person_info(name, age, seibetu, address) values ("test3", "26", "0", "tokyo bunkyouku");
 
 
select * from person_info;
+----+-------+------+---------+-----------------+
| id | name  | age  | seibetu | address         |
+----+-------+------+---------+-----------------+
|  1 | test1 | 20   | 0       | tokyo shibuyaku |
|  2 | test2 | 23   | 1       | tokyo chuouku   |
|  3 | test3 | 26   | 0       | tokyo bunkyouku |
+----+-------+------+---------+-----------------+
3 rows in set (0.00 sec)
 
 
補足
mysqlでの文字コード設定は忘れずにしておこう。(今更言うが...)
 
まずは文字コードの確認
 
show variables like "chara%";
 
 
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
 
mysqlの設定ファイルに以下を追加する
 
/etc/my.cnf
[mysqld] ←これは最初からあるのであったら書かなくてよい
....
character-set-server=utf8 #mysqldセクションの末尾に追加
 
[client]
default-character-set=utf8 #clientセクションを追加
 
設定後、MySQLを再起動する
 
変更されているか再度確認
show variables like "chara%";
 
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
 
 
4.FuelPHP側のDB設定ファイルに接続情報を定義する

 
以下に移動する
fuel/app/config/development
 
db.php
<?php
/**
 * The development database settings. These get merged with the global settings.
 */
 
return array(
     'default' => array(
          'connection'  => array(
               'dsn'        => 'mysql:host=localhost;dbname=sampledb', //php5.5以前の場合は、MySQLのデフォルトport番号を使用していれば、特に指定しなくても良い。
               'username'   => 'saiki-y',
               'password'   => 'test',
           ),
     ),
);
 
※ MySQLのポートの確認
mysql> show variables like 'port';
 
 
5.接続処理

 
以下のコントローラーファイル内のindex部分を修正
fuel/app/classes/controller/welcome.php
USE \DB;
・・・・
public function action_index()
{
     $query= DB::select()->from('person_info');
     $results=$query->execute();
 
     $view= 'welcome/index';
     $twig= View_Twig::forge($view);
     $presenter= Presenter::forge($view, 'view', null, $twig);
     $presenter-> set('results', $results);
 
     return Response::forge($presenter);
}
 
6.取得したデータを画面に表示する

出力画面のHTMLはこんな感じ
 
app/views/welcome/index.twig
<DOCTYPE html>
<html>
<head>
        <meta charset="utf-8">
        <title>FuelPHP Framework</title>
        {{ asset_css('bootstrap.css') }}
</head>
<body>
personal_infoテーブル内のデータ</br>
{% for result in results %}
  {{loop.index}}件目</br>
  "Id" : {{result.id}}</br>
  "名前" : {{result.name}}</br>
  "年齢" : {{result.age}}</br>
  "性別" : {{result.seibetu}}</br>
  "住所" : {{result.address}}</br>
{% endfor %}
</body>
<html>
 
 
7.もし実行時に以下のようなDBエラーが発生した場合

 
DBドライバーがインストールされていない場合は、以下のようなエラーが発生する
 
Fuel\Core\Database_Exception [ Error ]: could not find driver
 
 
ドライバーをインストールしてあげよう。
 
yum -y install php-pdo
yum -y install php-mysql
 
インストール後、apacheを再起動する
 
service httpd restart
 
再起動後、アプリケーションへアクセスを行い挙動が上記のエラーが発生しないことを確認
 
 
8.出力結果

 
アクセスすると以下の用にperson_infoテーブル内のデータをすべて取得して画面に出力できている。

f:id:y_saiki:20170514104754p:plain