PHP开发中如何将CRUD类全局化适配不同页面使用?
解决方案
第一步:抽离全局数据库初始化文件
把重复的数据库连接逻辑抽到公共文件中,所有需要操作数据库的页面直接引入即可,无需重复写连接代码。
<?php // common.php 全局公共文件 include('class/mysql_crud.php'); $db = new Database(); $db->connect(); // 全局范围内可直接调用$db对象 ?>
第二步:创建通用数据库操作入口,替代分散的insert.php等文件
你不需要为每个页面/每个表单独创建操作文件,也不需要写逐页面匹配的条件判断,仅需做参数化通用处理+安全校验即可。
创建db_action.php作为所有数据库操作的统一入口:
<?php // 引入公共文件,直接获取已完成连接的db对象 include 'common.php'; // 配置允许操作的表名白名单,防止恶意传入非法表名 $allow_tables = [ 'CRUDClass', 'user', 'article', // 后续新增表只需要在这里添加表名即可 ]; // 接收请求参数 $action = $_POST['action'] ?? ''; // 操作类型:insert/update/delete/select $table = $_POST['table'] ?? ''; // 基础参数校验 if (!in_array($table, $allow_tables) || empty($action)) { exit(json_encode(['code' => 400, 'msg' => '参数非法'])); } switch ($action) { case 'insert': $insert_data = $_POST['data'] ?? []; // 统一对插入数据做转义处理 foreach ($insert_data as $k => $v) { $insert_data[$k] = $db->escapeString($v); } $db->insert($table, $insert_data); $res = $db->getResult(); echo json_encode(['code' => 200, 'data' => $res]); break; case 'update': // 补充update逻辑即可,需额外接收where条件参数,实现逻辑和insert一致 break; case 'delete': // 补充delete逻辑即可 break; case 'select': // 补充查询逻辑即可 break; default: exit(json_encode(['code' => 400, 'msg' => '不支持的操作类型'])); } ?>
第三步:各页面调用方式
需要操作数据库的页面,不管是表单提交还是AJAX请求,直接调用这个统一入口即可,比如新增数据的AJAX请求示例:
$.post('db_action.php', { action: 'insert', table: 'CRUDClass', data: { name: 'Name 5', email: 'name5@email.com' } }, function(res) { console.log(res); });
注意事项
- 上述示例中接收的data参数建议也补充字段白名单校验,比如操作CRUDClass表时仅允许传入name、email两个字段,避免恶意用户传入非法字段篡改数据
- 生产环境使用时需要补充身份权限校验,仅允许已登录的授权用户调用对应数据库操作
内容的提问来源于stack exchange,提问作者Abdulrahman Mushref
相关产品推荐
相关产品推荐

