将MySQL代码与PHP代码分离是一种标准的、常见的做法吗?

将MySQL代码与PHP代码分离是一种标准的、常见的做法吗?,php,mysql,Php,Mysql,有人告诉我,将MySQL代码与PHP代码分开是一种常见的做法,这是真的吗?这是一个新的编码标准吗?这样做有什么好处吗 有人能告诉我在编写mass(例如开源脚本)时,什么是最佳的编码实践(PHP/MySQL) 谢谢 好问题 有人告诉我,将MySQL代码与PHP代码分开是一种常见的做法,这是真的吗? 绝对正确 这是一个新的编码标准吗? 旧观念。没有标准,但事实上是存在的 这样做有什么好处吗? 许多好处 层之间的解耦带来的好处 当业务逻辑与表示逻辑解耦时,如果需求发生变化,您可以轻松地对其

有人告诉我,将
MySQL
代码与
PHP
代码分开是一种常见的做法,这是真的吗?这是一个新的编码标准吗?这样做有什么好处吗

有人能告诉我在编写mass(例如开源脚本)时,什么是最佳的编码实践(
PHP/MySQL

谢谢

好问题

  • 有人告诉我,将MySQL代码与PHP代码分开是一种常见的做法,这是真的吗?
    • 绝对正确
  • 这是一个新的编码标准吗?
    • 旧观念。没有标准,但事实上是存在的
  • 这样做有什么好处吗?
    • 许多好处
    • 层之间的解耦带来的好处
    • 当业务逻辑与表示逻辑解耦时,如果需求发生变化,您可以轻松地对其进行更改
    • 因此,不仅要将sql与php分开,还要将HTML代码与php逻辑分开
使用sqlMap 在Java世界中有MyBatis SqlMapper。这是非常常用的,如果您是Java程序员,这正是您想要的

但是在PHP中,很难找到像MyBatis这样的东西,我唯一找到的就是
PRADO

使用ORM ORM=对象关系映射。 这也被使用。但我不知道PHP有ORM框架。如果有人知道,请告诉我@jszobody建议(谢谢)

谢谢。

问得好

  • 有人告诉我,将MySQL代码与PHP代码分开是一种常见的做法,这是真的吗?
    • 绝对正确
  • 这是一个新的编码标准吗?
    • 旧观念。没有标准,但事实上是存在的
  • 这样做有什么好处吗?
    • 许多好处
    • 层之间的解耦带来的好处
    • 当业务逻辑与表示逻辑解耦时,如果需求发生变化,您可以轻松地对其进行更改
    • 因此,不仅要将sql与php分开,还要将HTML代码与php逻辑分开
使用sqlMap 在Java世界中有MyBatis SqlMapper。这是非常常用的,如果您是Java程序员,这正是您想要的

但是在PHP中,很难找到像MyBatis这样的东西,我唯一找到的就是
PRADO

使用ORM ORM=对象关系映射。 这也被使用。但我不知道PHP有ORM框架。如果有人知道,请告诉我@jszobody建议(谢谢)


谢谢。

是的,这是许多编程语言的标准。通常,您会编写存储过程,并让php代码利用这些过程来完成数据库工作。这种分离使得管理代码库更加容易,并有助于维护和扩展

是的,这是许多编程语言的标准。通常,您会编写存储过程,并让php代码利用这些过程来完成数据库工作。这种分离使得管理代码库更加容易,并有助于维护和扩展

有人告诉我,将MySQL代码与 PHP代码,这是真的吗

我认为,您正在谈论的是,将应用程序逻辑分为几个部分(构建一个好的体系结构),这样您就可以保持事情的组织性和可维护性。实际上,这是一个太广泛的讨论,我可能无法正确地描述所有内容,但要回答您的问题,是的,这是一个很好的(推荐的)实践,也是软件开发中的一个设计原则

在应用程序中,最重要的部分是为应用程序服务的域/业务逻辑,它应该与其他逻辑分开,例如表示逻辑(
UI
)。例如,如果您的应用程序处理用户和产品的创建,那么您可以将它们作为应用程序的一个实体保存在单独的位置。比如说

用户管理

class User {

    public function createUser()
    {
        // ...
    }

}
class Product {

    public function addProduct()
    {
        // ...
    }

}
产品管理

class User {

    public function createUser()
    {
        // ...
    }

}
class Product {

    public function addProduct()
    {
        // ...
    }

}
这是您的业务逻辑,您可以从单独的类/位置使用/调用这些逻辑,如

$user = new User;
$user->create();
现在,考虑一下数据存储机制,如果您创建了一个新用户,您可能需要将所有信息放在一个地方,它可能是一个数据库、平面文件或xml文件,因此,您应该在
createUser()
函数中做些什么,您应该在数据存储和业务逻辑之间使用一个数据访问层,这意味着,无论您使用什么数据存储,您都不应该直接使用
createUser()
函数(业务逻辑)中的任何代码,而是通过另一层()访问数据存储,例如,您的
createUser()
函数可能如下所示

class User {

    protected $storage = null;

    public function __construct($storage)
    {
       $this->storage = $storage;
    }

    public function createUser()
    {
        $userData = $_POST['first_name'];
        $userData = $_POST['user_name'];
        // more fields...

        // data validation

        $this->storage->save($userData);
    }
}
class DbStorage{

    protected $db = null;

    public function __construct($database)
    {
        $this->db = $database;
    }

    public function save($data)
    {
        $this->db->insert($data);
    }

}
$config = array('hostname' =>'localhost', 'username'=>'root', 'password'=>'123456', 'database'=>'myDatabase');
$storage = new DbStorage(new MySqlDriver($config));
$user = new User($storage);
class MySqlDriver(){

    public $connection;
    public $database;
    public function __construct($config)
    {
        $this->connection = mysql_connect($config['hostname'], $config['username'], $config['password'], $config['database']);
        mysql_select_db($db);
    }

    public function insert($data)
    {
        // code for insert (mysql)
    }

}
现在,要创建一个用户并将其保存到数据库中,您可以像

$storage = new DbStorage();
$user = new User($storage);
也许,您想使用平面文件来存储数据,而不是数据库,没问题,只需更改数据存储,即

$storage = new FileStorage();
$user = new User($storage);
现在,看到区别了吧,您的save方法不知道存储机制,它只调用
存储->save()
,每个存储都有自己的存储机制,东西都是有组织的、干净的、易于维护的,更改存储机制而不必对代码做任何更改。所以,就像

业务逻辑-->数据访问层-->数据存储

在数据访问层,您应该根据您的存储机制编写代码,如果您有一个数据库作为存储,那么您可以根据该机制编写代码,在这种情况下,您的
DbStorage
可能有自己的
抽象数据库层
(不同数据库的不同驱动程序,即
mysql
oracle
等),这里
ORM
起作用

所以,最主要的是保持事物
松散耦合
,这有助于您构建一个干净且可维护的应用程序。这只是一个小主意。这些链接可能会对您有所帮助

  • class OracleDriver(){ // ... public function __construct($config) { // ... } public function insert($data) { // code for insert (oracle) } }
  • return array(
        'mysql' => array(
            'hostname'=>'localhost',
            ...
        ),
            'oracle' => array(
            'hostname'=>'localhost',
            ...
        )
    );