1

Web サイトに 4 つのフォームがあり、MySQL データベースの 4 つの異なるテーブルにユーザー入力を送信しています。これら 4 つのフォームのすべてのクエリを 1 つの php ファイルに入れるのは良い方法ですか?

現在、フォームごとに異なるphpファイルがあります。例えば。form-abc.html にはデータベースと通信するための abc.php があり、form-def.html には def.php などがあります。

これらすべての形式の mysqli 接続は同じになるので、すべてのクエリ/関数を含む php ファイルから関連する関数/クエリを呼び出すことができるかどうか疑問に思っていましたか? 可能であれば、どのように?

4

1 に答える 1

1

全体として、コードを 1 つのファイルに入れることはお勧めできません。特に 4 つのクエリの目的が明確に関連していない場合はなおさらですが、データベースに接続するためのコードを各ファイルに含めるのも適切な設計ではありません。 、またクエリ文字列を手作りする必要があります。

データベースへの接続を返す単一のライブラリ関数を用意することから始めて、共通コードをユーティリティ ライブラリに分解するように努める必要があります。接続の詳細、データベースの名前などを変更すると、4 回ではなく 1 回の変更で済むため、ミスの可能性が減少します。4 つのファイルは、データベースへの接続方法を知る必要もありません。コードを削除することで、それを実現できます。

クエリを手作業で作成すると、データを適切にエスケープできず、必要以上のコードを記述してしまい、特定のデータベース タイプに縛られてしまう可能性があるため、ライブラリ ルーチンを使用して支援することを目指す必要があります。これとともに。PHP には既にいくつかのライブラリが用意されていますが、この仕事により適した独自のライブラリを開発することもできます。

非常に大まかに言えば、次のようなコードになる可能性があります。


<?php

include_once "db_utils.php";

$db = DB::get_instance();

if (isset($_POST['form_submitted'])) {
  // Validation etc.
  $customers = $db->table('customers');

  $customers->insert(array('name' => $_POST['name'], 'email' => $_POST['email']));
  // ...
}

インクルードにはデータベース ユーティリティが含まれ、この場合は DB と呼ばれるクラスとテーブル クラスが提供されます。get_instance() は、接続をカプセル化するデータベース インスタンスを提供する静的メソッドです。接続情報を取得する方法を知っていると仮定するため、メソッドにそれを提供する必要はありません。table() メソッドは、データベース テーブルで操作を実行する方法を認識しているデータベース テーブルのインスタンスを提供します。テーブル インスタンスの insert() メソッドは、キーと値のペア データの配列を受け取り、各項目の値をエスケープして挿入を行います。

この場合、クエリを必要とするファイルとともにクエリを保持すると、メンテナンスが容易になります。

サイト全体に対する別のアプローチは、フレームワークを使用することです。このような場合、ビジネス ロジック、データベース管理、およびレンダリング コードは分離されます。これは、重要なシステムでは一般的に望ましい目標です。そのことを念頭に置いてその場しのぎの方法でシステムを石畳にすると、開発者がリクエストで役割を果たす関連コードを見つけるのに苦労して、すぐに保守不能なシステムにつながる可能性があります。それを大幅に軽減する命名規則とレイアウト規則。

ただし、現在の状況については、重複するコードを特定し、それを除外し、いくつかのデータベース ライブラリを探して (現在の場合) 手動でクエリを作成しないようにし、システムをシンプルに保つことを目指してください。

于 2013-07-13T12:28:48.777 に答える