アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うことを書いてます。

PHP+eclipse:MariaDBを使うシンプルなクラスでDBアクセス+UNITテストもやっとこう。

今回は、素で使うPHPの締めとして、簡単なDBアクセスクラスを追加して、DBアクセスを含むUNITテストをやっときます。

f:id:arakan_no_boku:20180926203227j:plain

 

MariaDBインスタンスを管理するだけのクラス

 

DBアクセスには、PHPのmysqliを使います。

基本的な使い方は、前に記事に書いているので、改めては書きません。

arakan-pgm-ai.hatenablog.com

しょせんサンプルなので、凝っても仕方ありません。

単純に、MariaDBへのコネクションだけを管理するクラスにします。

ソースコードはこんな感じです。

    <?php
class MariaDBi{

    private $mysqli;

    function __construct($host,$userName,$password,$dbname){

        $this->mysqli = new mysqli($host,$userName,$password,$dbname);
        if ($this->mysqli->connect_error) {
            print("DB接続NG");
            exit();
        } else {
            $this->mysqli->set_charset("utf8");
        }

    }

    public function get(){
        return $this->mysqli;
    }


}
?>

 

コンストラクタでDB接続し、コネクションのインスタンスを管理して、get()で渡す。

それだけです。

MariaDBは事前にインストールして、test データベースを作ってます。

簡単な単体テストも作っときましょう。

上記ソースを右クリックして、新規>PHPUnit Test Case で自動生成したものに、DB情報を書き加えて、DBインスタンスがNULLかどうかチェックしているだけですが。

    <?php
require_once '../models/MariaDBi.php';

/**
 * MariaDBI test case.
 */
class MariaDBiTest extends PHPUnit_Framework_TestCase
{

    /**
     *
     * @var MariaDBI
     */
    private $mariaDBI;

    /**
     * Prepares the environment before running a test.
     */
    protected function setUp()
    {
        parent::setUp();

        // TODO Auto-generated MariaDBITest::setUp()

        $this->mariaDBI = new MariaDBi('127.0.0.1','demo','demopass','test');
    }

    /**
     * Cleans up the environment after running a test.
     */
    protected function tearDown()
    {
        // TODO Auto-generated MariaDBITest::tearDown()
        $this->mariaDBI = null;

        parent::tearDown();
    }

    /**
     * Constructs the test case.
     */
    public function __construct()
    {
        // TODO Auto-generated constructor
    }

    /**
     * Tests MariaDBI->__construct()
     */
    public function test__construct()
    {

    }

    /**
     * Tests MariaDBI->get()
     */
    public function testGet()
    {

        $test = $this->mariaDBI->get();
        $this->assertNotNull($test,"OK");
    }
}

OKです。 

f:id:arakan_no_boku:20180901184739j:plain

 

PracModelクラスをDBアクセスするように変更する

 

べた書きしていたのを、DBアクセスするようにします。

まず、テスト用のテーブル「demo」を作ります。

f:id:arakan_no_boku:20180901211214j:plain

そこに以下のようなデータを適当にインストールします。

insert into demo values(1,'田中隆','男性','1981/03/15');
insert into demo values(2,'小泉慎太郎','男性','1981/03/15');
insert into demo values(3,'須藤貫太郎','男性','1982/04/15');
insert into demo values(4,'毛利孝雄','男性','1983/05/15');
insert into demo values(5,'伊丹素顔','男性','1985/03/17');
insert into demo values(6,'手塚次郎','男性','1988/07/19');
insert into demo values(7,'友幸孝弘','男性','1989/08/05');

 でまあ、ここからID(先頭の数字)が5より小さい行だけ表示するとかしてみます。

    <?php
require 'MariaDBi.php';

class PracModel{

    private $db;

    function __construct(){
        $this->db = new MariaDBi('127.0.0.1','root','papa','test');

    }

    public function getTableData(){
        $ar_tbl = array();
        if ($stmt = $this->db->get()->prepare("select  * from demo  where id <= ?")) {
            $stmt->bind_param("i",$id);
            $id = 5;
            $isSuccess = $stmt->execute();
            if($isSuccess){
                $result = $stmt->get_result();
                while ($row = $result->fetch_array(MYSQLI_NUM)){
                    $ar_tbl[] = $row;
                }
            }
            $stmt->close();
        }
        return $ar_tbl;
    }
}
?>

 

結果はこんな感じ。

f:id:arakan_no_boku:20180901213329j:plain

まあ、こんなもの。

とりあえず、eclipsePHP開発が結構快適にできるのは、よくわかりました。

プライベートでWEBアプリ作る時の候補として,しばし試してみようかな。