Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不同类中的冗余MySQL查询_Php_Mysql_Redundancy - Fatal编程技术网

Php 不同类中的冗余MySQL查询

Php 不同类中的冗余MySQL查询,php,mysql,redundancy,Php,Mysql,Redundancy,我正在创建一个PHP Web应用程序,它使用8个类(后面还有更多)。我意识到所有这些类都具有几乎相同的访问数据库的功能:get_single、get_list、insert、update和delete 当然,对于每个类,哪个数据库表被寻址,哪个字段被选择是不同的 例如: function get_single($conn) { $sql = $conn->prepare('SELECT id_person, join_date, img_profile, img_header,

我正在创建一个PHP Web应用程序,它使用8个类(后面还有更多)。我意识到所有这些类都具有几乎相同的访问数据库的功能:get_single、get_list、insert、update和delete

当然,对于每个类,哪个数据库表被寻址,哪个字段被选择是不同的

例如:

function get_single($conn) {

    $sql = $conn->prepare('SELECT id_person, join_date, img_profile, img_header, firstname, familyname, nationality, mail, password, birthday FROM person WHERE id_person = ?');
    $sql->bind_param('i', $this->id);


    $sql->execute();
    $sql->bind_result($this->id, $this->join_date, $this->profile_img, $this->header_img, $this->firstname, $this->familyname, $this->nationality, $this->mail, $this->password, $this->birthday);

    $sql->fetch();

    return $this;
}
我问自己是否可以或应该为所有类编写一个函数,如下所示:

function get_single($id, $conn, $query) {

    $sql = $conn->prepare($query);
    $sql->bind_param('i', $id);


    $sql->execute();
    $sql->bind_result(/* ??? */);

    $sql->fetch();

    return /* ??? */ ;
}
。。。然后打电话

$foo = new Foo(array('id' => $bar));
$foo = get_single($foo->id, $conn, $qry_single_foo);
这样我可以

  • 集中存储所有SQL查询
  • 减少代码的总量
  • 增加可读性。。。也许吧
或者我应该拥有这些类继承自的父类

还是使用设计模式?也许是装修工?(对不起,据我所知,那里完全不存在)

现在我意识到用不同的方式做可能会更容易,我有点被各种可能性所压倒

想法


谢谢

您可以使用web MVC框架或ORM库

请检查一些可以与应用程序集成的ORM库

ORM


您可以使用web MVC框架或ORM库

请检查一些可以与应用程序集成的ORM库

ORM


问题是,存在“紧耦合”,你的类是潜在的“上帝对象”。你可能想看看存储库设计模式。。嗯,我不完全确定我是否使用MVC。。。我有一些类,这些类完成了所有数据库与查询的连接。我有一个index.php,其中大部分业务逻辑都发生在那里,我在那里包含了不同的页面,这些页面完成了所有的显示工作(所有的HTML).你的方法有点正确..但主要问题是很难学会用php实现OOP,因为它最初是一种脚本语言..而且OOP是一个大世界..可能有其他一些设计模式等来解决你的问题,但你的问题涉及到存储库设计模式..这是最容易理解的模式之一..我有点困惑(我的代码有点错误)。我像这样调用
get_single()
-函数:
$p->get_single($conn)
。在调用函数之前,
$p
已经是所需类型的对象,但除了ID之外为空。函数只是填充了它。那么为什么要使用工厂来创建一个已经存在的对象呢?其次,我仍然不确定如何泛化
bind\u result()
-函数,以便所有类都可以使用它?例如,某些类别(或数据库表)有“名字”,其他类别有“说明”或“文件名”,必须用结果填充…感谢到目前为止:)Factory模式和Repository模式是不同的模式,但主要一起使用..Factory模式不是关于如何使用“调用对象”,是关于如何“创建对象”。bind_result()函数是一个mysql方法。因此,您可以在数据库对象上使用它。存储库模式用于CRUD操作。问题是,存在“紧密耦合”,或者类是潜在的“上帝对象”“。您可能需要查看存储库设计模式。”。。嗯,我不完全确定我是否使用MVC。。。我有一些类,这些类完成了所有数据库与查询的连接。我有一个index.php,其中大部分业务逻辑都发生在那里,我在那里包含了不同的页面,这些页面完成了所有的显示工作(所有的HTML).你的方法有点正确..但主要问题是很难学会用php实现OOP,因为它最初是一种脚本语言..而且OOP是一个大世界..可能有其他一些设计模式等来解决你的问题,但你的问题涉及到存储库设计模式..这是最容易理解的模式之一..我有点困惑(我的代码有点错误)。我像这样调用
get_single()
-函数:
$p->get_single($conn)
。在调用函数之前,
$p
已经是所需类型的对象,但除了ID之外为空。函数只是填充了它。那么为什么要使用工厂来创建一个已经存在的对象呢?其次,我仍然不确定如何泛化
bind\u result()
-函数,以便所有类都可以使用它?例如,某些类别(或数据库表)有“名字”,其他类别有“说明”或“文件名”,必须用结果填充…感谢到目前为止:)Factory模式和Repository模式是不同的模式,但主要一起使用..Factory模式不是关于如何使用“调用对象”,是关于如何“创建对象”。bind_result()函数是一个mysql方法。因此,您可以在数据库对象上使用它。存储库模式用于CRUD操作。。