我的网站上有四个表单,将用户输入发送到我的 MySQL 数据库中的四个不同表。将这四种形式的所有查询放在一个 php 文件中是一种好习惯吗?
目前,我对每个表单都有一个不同的 php 文件。例如。form-abc.html 有一个 abc.php 与数据库通信,form-def.html 有一个 def.php 等等。
由于所有这些形式的 mysqli 连接都是相同的,我想知道是否可以从包含所有查询/函数的 php 文件中调用相关的函数/查询?如果有可能,怎么做?
总的来说,将代码放在一个文件中并不是一个好习惯,特别是如果四个查询在其目的方面没有明显相关,但让每个文件都包含连接到数据库的代码也是糟糕的设计,并且还要手工制作查询字符串。
您应该设法将通用代码分解到实用程序库中,起点是拥有一个返回数据库连接的库函数。更改连接详细信息、数据库名称等需要一次更改而不是四次更改,从而减少出错的机会。您的四个文件也不需要知道如何连接到数据库,删除代码即可实现。
与其手工制作查询,否则有可能无法正确转义数据,最终您将编写比必要更多的代码以及将自己锁定到特定数据库类型,您应该旨在拥有库例程来提供帮助有了这个。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() 方法将获取一个键/值对数据数组,转义每个项目的值并执行插入。
在这种情况下,将查询与需要它们的文件一起保存应该便于维护。
整个站点的另一种方法是使用框架。在这种情况下,业务逻辑、数据库管理和渲染代码将被分离,这对于非平凡的系统通常是一个可取的愿望。如果以一种特别的方式将系统与考虑到的系统拼凑在一起,这可能很快导致系统无法维护,开发人员很难找到参与请求的相关代码,但是框架会通过以下方式强加一个结构命名和布局约定将在很大程度上缓解这种情况。
但是,对于您现在所处的位置,只需要识别重复的代码,将其排除,寻找一些数据库库,这样您就不会手工制作查询(如果您现在是的话),并保持您的系统简单。