中年プログラマーの息抜き

ブログをはじめました。気の向くままにプログラム関連ネタをメモしていきます。

zend-expressiveでデータベースからデータを取得した

PHP5.6+OCI8(ORACLE11g)+zend-expressiveを駆け足で導入

1.composer
curl -sS https://getcomposer.org/installer | php

2.zend-expressive-skeleton
create-project -s rc zendframework/zend-expressive-skeleton expressive
[テンプレートだけ追加]
Make your selection (No): no
Which router do you want to use?・・・ (FastRoute): 1
Which container do you want to use for dependency injection?・・・ (Zend ServiceManager): 3
Which template engine do you want to use?・・・ (Zend View installs Zend ServiceManager): 3
Which error handler do you want to use during development?・・・(Whoops): 1

3.oracle-instantclient
[11gだと古いようで、最新をインストール]
rpm -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
rpm -ivh oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
[必要そうなものをリンク]
ln -s /usr/lib/oracle/12.1/client64/lib/libipc1.so /usr/lib64/libipc1.so
ln -s /usr/lib/oracle/12.1/client64/lib/libclntshcore.so.12.1 /usr/lib64/libclntshcore.so.12.1
ln -s /usr/lib/oracle/12.1/client64/lib/libclntsh.so.12.1 /usr/lib64/libclntsh.so.12.1
ln -s /usr/lib/oracle/12.1/client64/lib/libnnz12.so /usr/lib64/libnnz12.so
ln -s /usr/lib/oracle/12.1/client64/lib/libocci.so.12.1 /usr/lib64/libocci.so.12.1
ln -s /usr/lib/oracle/12.1/client64/lib/libocijdbc12.so /usr/lib64/libocijdbc12.so
ln -s /usr/lib/oracle/12.1/client64/lib/libons.so /usr/lib64/libons.so
ln -s /usr/lib/oracle/12.1/client64/lib/liboramysql12.so /usr/lib64/liboramysql12.so

4.oci8
yum install --enablerepo=remi-php56 php-oci8.x86_64
[状態を確認「php -i | grep oci8」]
/etc/php.d/20-oci8.ini,
oci8
oci8.connection_class => no value => no value
oci8.default_prefetch => 100 => 100
oci8.events => Off => Off
oci8.max_persistent => -1 => -1
oci8.old_oci_close_semantics => Off => Off
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20

5.Apache環境変数
vi /etc/sysconfig/httpd
ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe #追加
NLS_LANG=Japanese_Japan.AL32UTF8 #追加
export ORACLE_HOME NLS_LANG #追加
[Apacheを再起動]
/bin/systemctl restart httpd.service

6.zend-db
composer require zendframework/zend-db

早速で動作確認するとこんな感じ

f:id:tm-b:20160417205436p:plain

DB接続設定コーディング

1.database.global.php
[ファイル作成]
config/autoload/database.global.php
<?php
return [
    'db' => [
    'driver' => 'Pdo',
    'dsn' => 'oci:dbname=(DESCRIPTION= ・・・tnsnames.oraの内容で設定 )',
    'user' => 'xxx',
    'password' => 'xxx'
], ];

2.dependencies.global.php
[配列factoriesへ行追加]
config/autoload/dependencies.global.php
Adapter\Adapter::class => Adapter\AdapterServiceFactory::class

3.index.php
[グローバル変数を追加]
public/index.php
$adapter = $container->get(\Zend\Db\Adapter\Adapter::class);

DBからデータを取得してみる

[こんな感じで取得]
    global $adapter;
    $statement = $adapter->createStatement("SELECT * FROM MST_TEST");
    $result = $statement->execute([]);
    foreach ($result as $record) {
        $record['COLUMN1'];
        $record['COLUMN2'];
        $record['COLUMN3'];
    }

まとめ

必要なものだけ準備するマイクロフレームワーク[zend-expressive]でデータベースからデータを取得するところまで実践しました。