• 投稿日:2022年02月13日 08時39分22秒
  • 更新日:2022年03月03日 09時32分10秒
mysqli操作クラス

mysqli操作クラス

MyDB

define('DB接続情報', array('host'     =>'******',
                          'username' =>'******',
                          'passwd'   =>'******', 
                          'dbname'   =>'******', 
                          'port'     =>'******')
);

class MyDB
{
    public $mysqli; // mysqliオブジェクト
    public $mode;   // 戻り値の形式:"json" or "array"(連想配列)
    public $count;  // SQLによって取得した行数 or 影響した行数

    // コンストラクタ
    function __construct($mode = "array") 
    {
        $this->mode = $mode;

        // DB接続
        $this->mysqli = new mysqli(DB接続情報['host'], DB接続情報['username'], DB接続情報['passwd'], DB接続情報['dbname']);
        if ($this->mysqli->connect_error) {
            echo $this->mysqli->connect_error;
            exit;
        } else {
            $this->mysqli->set_charset("utf8mb4");
        }
    }

    // デストラクタ
    function __destruct()
    {
        // DB接続を閉じる
        $this->mysqli->close();
    }

    function begin_tran(){
        $this->mysqli->begin_transaction();
    }

    function commit(){
        $this->mysqli->commit();        
    }

    function rollback(){
        $this->mysqli->rollback();        
    }
    function close(){
        $this->__destruct();     
    }

    // SQL実行(SELECT/INSERT/UPDATE/DELETE に対応)
    function query($sql)
    {
        // SQL実行
        $result = $this->mysqli->query($sql);
        // エラー
        if ($result === FALSE) {
            // エラー内容
            $error = $this->mysqli->errno.": ".$this->mysqli->error;
            // 戻り値
            $rtn = array(
                'status' => FALSE,
                'count'  => 0,
                'result' => "",
                'error'  => $error
            );
            if($this->mode == "array")
                return $rtn;
            else
                return json_encode($rtn); // JSON形式で返す(デフォルト)
        }

        // SELECT文以外
        if($result === TRUE) {
            // 影響のあった行数を格納
            $this->count = $this->mysqli->affected_rows;
            // 戻り値
            $rtn = array(
                'status' => TRUE,
                'count'  => $this->count,
                'result' => "",
                'error'  => ""
            );
            if($this->mode == "array")
                return $rtn;
            else
                return json_encode($rtn); // JSON形式で返す(デフォルト)
        } 
        // SELECT文
        else {
            // SELECTした行数を格納
            $this->count = $result->num_rows;
            // 連想配列に格納
            $data = array();
            while ($row = $result->fetch_assoc()) {
                $data[] = $row;
            }
            // 結果セットを閉じる
            $result->close();
            // 戻り値
            $rtn = array(
                'status' => TRUE,
                'count'  => $this->count,
                'result' => $data,
                'error'  => ""
            );
            if($this->mode == "array")
                return $rtn;
            else
                return json_encode($rtn); // JSON形式で返す(デフォルト)
        }
    }

    // 文字列をエスケープする
    function escape($str)
    {
        return $this->mysqli->real_escape_string($str);
    }
}

説明

phpでデータベースを扱う際に使っているmysqliオブジェクトの操作クラス。オブジェクト指向的に言えばラッパークラスとなる(のかな?)。

連想配列の定数「DB接続情報()」を接続情報として、mysqliオブジェクトを作成します。
文字コードは「utf8mb4」です。

 

詳細

使い方

$db = new MyDB(); // 上記で作成したクラスのインスタンスを作成
$db->begin_tran(); // トランザクション開始
$result = $db->query("select * from `table`"); // クエリ(SQL)の実行

// 以下クエリ実行結果を使って判定と後続処理を行う
if ($result ["status"] == false ){
	echo '失敗';
}else if($result ["count"] < 1 ){ echo '0件'; }else{ foreach($result ["result"] as $key=>$row){
		// 取得したテーブルの行単位で処理を行う場合
	}
}

最後に

これは確かネットで見つけたものを少しいじって使っていたような。 でもそのサイトのURLがわかんなかったので、いつか見つかればリンクを張らせていただきます。申し訳ありません。

やっぱネットで見つけて使わせていただいているものはURLをメモっとかないといけないと再認識させられました。

最後に

【Laravel】configファイルについて
Laravel Sailでサクッと環境構築
Laravelを使って開発したものを本番環境へ
Laravelをインストールし開発環境を整備する
Laravelのコマンドを色々まとめ
MySQLでよく使うSQL-ユーザ関係-
MySQLでバックアップとリストア
UbuntuにNginx, MySQL, php をインストールする