UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#228 配列データ一括INSERT用のクラスを作成してコードを共通化

記入日:2023-08-24 編集日:2023-08-24

配列データ一括INSERT用のクラスを作成してコードを共通化する方法に関して解説をしてみようと思います。

この記事を読むと(約5分)
配列データ一括INSERT用のクラスを作成してコードを共通化する方法に関してイメージできます。

配列データ一括INSERTクラス

以下は、PHPでデータベースに新しい行を挿入するための2つのクラス DatabaseConnection と InsertQueryBuilder です。 また、これらのクラスを使用してデータを挿入する際の使用例も示しています。

class DatabaseConnection {
  private $pdo;

  public function __construct($host, $dbname, $user, $password) {
    try {
      $this->pdo = new PDO("mysql:host={$host};dbname={$dbname}", $user, $password);
      $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
      throw new Exception("Database connection failed: " . $e->getMessage());
    }
  }

  public function getPdo() {
    return $this->pdo;
  }
}

class InsertQueryBuilder {
  private $table;
  private $data;

  public function __construct($table, $data) {
    $this->table = $table;
    $this->data = $data;
  }

  public function buildQuery() {
    $fields = implode(', ', array_keys($this->data));
    $placeholders = ':' . implode(', :', array_keys($this->data));

    $query = "INSERT INTO {$this->table} ({$fields}) VALUES ({$placeholders})";

    return $query;
  }

  public function execute(PDO $pdo) {
    $query = $this->buildQuery();
    $stmt = $pdo->prepare($query);

    foreach ($this->data as $key => $value) {
      $stmt->bindValue(":{$key}", $value);
    }

    $stmt->execute();
  }
}

// 使用例
$databaseHost = 'localhost';
$databaseName = 'your_database';
$databaseUser = 'your_user';
$databasePassword = 'your_password';

try {
  $dbConnection = new DatabaseConnection($databaseHost, $databaseName, $databaseUser, $databasePassword);
  $pdo = $dbConnection->getPdo();

  $data = [
    'name' => 'John Doe',
    'email' => 'john@example.com',
    'age' => 30
  ];

  $tableName = 'users';

  $insertQueryBuilder = new InsertQueryBuilder($tableName, $data);
  $insertQueryBuilder->execute($pdo);

  echo "Data inserted successfully!";
} catch (Exception $e) {
  echo "Error: " . $e->getMessage();
}

各クラスと使用例の部分を説明します。

DatabaseConnectionクラス:
このクラスは、データベース接続を確立するために使われます。コンストラクタが提供されたホスト名、データベース名、ユーザー名、パスワードを使用してPDO接続を初期化し、エラーモードをエラーハンドリングに適したものに設定します。getPdo() メソッドは、初期化されたPDO接続を外部に提供します。


InsertQueryBuilderクラス:
このクラスは、新しい行をデータベースに挿入するためのクエリを構築および実行します。コンストラクタでは、挿入するデータの配列とテーブル名を受け取ります。

buildQuery() メソッドは、与えられたデータ配列からINSERT文のクエリを構築します。配列内のキー(カラム名)を使用してINSERT文のカラム部分を生成し、対応するプレースホルダーを値部分に生成します。

execute() メソッドは、提供されたPDO接続を使用してクエリを実行します。データ配列内の値をプレースホルダーにバインドして、新しい行をデータベースに挿入します。


使用例:
この部分では、実際の使用例が示されています。データベース接続情報や挿入するデータを用意し、DatabaseConnection クラスを使用してPDO接続を取得します。その後、InsertQueryBuilder クラスを使って、挿入するデータの配列とテーブル名を指定し、execute() メソッドを呼び出してデータベースにデータを挿入します。エラーハンドリングも行っています。

これによって、提供されたデータが指定されたテーブルに新しい行として挿入される処理が行われます。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。