2

我在一个创建 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 查询放在哪里?我的意思是,在 Internet 上的示例中,您会看到身份验证系统中的数据库查询在两个完全不同的模块之间建立了强耦合。如果我们决定不使用 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 类来执行查询。

也许我让问题变得更大?

4

1 回答 1

1

正如 biziclop 所说:看看

或其他抽象层。

如果您想自己构建一些东西,那么您尝试做的事情似乎是一个好的开始。

于 2012-03-11T12:56:45.587 回答