をダウンロードして、Webアプリケーションを作成するプロジェクトに挿入します。 php5で書く。データベースをデカップリングして、実際にはコード
私はユーザシステムを作成していたので(ログイン、新しいユーザやものを登録する)、突然私は突然データベースコードを手に入れました。いけない私は間違って、私は単一のクエリ機能を持つシングルトンデータベースクラスを使用しています。
class MySQLDB {
private staic $instance = null;
private $config;
private $connection = null;
[...]
public function query($query, $other_dbname = NULL) {
$name = $this->config->dbname;
if($other_dbname != NULL) {
$name = $other_dbname;
}
mysql_select_db($name, $this->connection);
$result = mysql_query($query);
[...]
}
これまでのところとても良いです。しかし、どこにSQLクエリを置くのですか?つまり、インターネット上の例では、認証システムのデータベースクエリが、全く異なる2つのモジュール間の強い結合をしていることがわかります。 MySQLデータベースを使用しない場合はどうなりますか?次に、接続とクエリ機能を持つMySQLDBクラスを交換するだけで済むわけではありませんが、Webアプリケーション全体のすべての部分にはSQLクエリが含まれています。
私のソリューションは、MySQLDBクラスの隣にMySQLQueryer静的クラスを持つことでした。どこで私はすべてのSQLクエリを実行し、実行します。このように登録し、新しいユーザー機能:ハッシュと塩のすべての創造は、ユーザ認証モジュールで実行されていることを
public function register($user, $hash, $salt) {
$user = mysql_real_escape_string($user);
$query = "INSERT INTO users (username, password, salt) VALUES ('$user' , '$hash' , '$salt');";
$ret = $this->db->query($query);
return $ret;
}
注意を(つまり、データベースモジュールではありません)。
これは良い解決策であると思いますか、それとも良いものがありますか?たとえば、上記のレジスタ関数を使用してAuthenticationMySQLDatabaseHelperクラスを作成する方が良いでしょうか?つまり、それぞれのモジュールに独自のMySQLDatabaseHelperクラスを持たせてクエリを実行させます。
多分私は問題をそれより大きくしていますか?
答えにはDoctrine、Propel、Symphony、Yeeなどの単語が含まれている可能性があります。 – biziclop
より良いもの:PDOまたはMySQLiオブジェクトを直接使用します。自分で書く必要はありません。他の部分はIMHOのように見えますが、実際のオブジェクトをデータベース層に無関係にするだけです。 – hakre