前言
在使用mysql类库时,需要封装 PHP 的 MySQL 开发 API 接口,为了设计出更加可靠、安全和易于使用的接口,以下是一些常见的注意事项:
- 参数验证和过滤:确保对传入 API 接口的参数进行严格的验证和过滤,以防止 SQL 注入攻击和其他安全漏洞。可以使用 PHP 的过滤器函数(如filter_var)或者利用预定义的过滤器(如FILTER_SANITIZE_STRING)来验证和过滤参数。
- 错误处理与异常管理:编写健壮的错误处理和异常管理机制,检查每个数据库操作的返回值或抛出相应的异常。在处理异常时,提供有用的错误信息,以便于追踪和调试问题。
- SQL 查询安全性:对于动态构建的 SQL 查询,尽量使用参数化查询(prepared statements)来防止 SQL 注入攻击。参数化查询能够在发送给数据库服务器之前对参数进行处理和转义,从而有效地阻止恶意用户对数据库进行攻击。
- 数据库连接管理:保证数据库连接的有效管理,避免频繁的连接和断开操作对性能造成的负面影响。可以使用连接池、持久连接等技术来优化数据库连接的性能和资源利用。
- 错误日志记录:将数据库操作过程中的错误信息进行记录和追踪,以便能够快速定位问题并进行处理。可以使用 PHP 的错误日志记录函数(如error_log)将错误信息写入日志文件或发送到指定的日志系统。
- 安全性考虑:避免在 API 接口中直接暴露敏感信息,如数据库用户名、密码等。尽量采用配置文件等安全方式进行敏感信息的存储和引用。
- 跨库和跨表兼容性:尽量编写通用的 API 接口,能够适应不同的数据库和表结构。考虑到不同数据库之间的差异,使用标准化的 SQL 语法和数据类型,以确保 API 在不同环境中的兼容性。
- 性能优化:对数据库操作进行性能优化,避免频繁的查询或更新操作。可以使用缓存技术、索引优化、批量操作等方法来提高数据库的性能和响应速度。
- API 接口设计规范:按照良好的 API 设计规范,使用符合 RESTful 风格的 URL、清晰的接口命名和语义化的 HTTP 方法。提供一致性的接口返回格式,如 JSON 或 XML,以方便客户端的调用和解析。
- 单元测试和文档化:通过编写单元测试案例来验证 API 接口的正确性和稳定性。并且提供清晰、详细的文档,描述 API 接口的使用方法、参数说明、返回值等,以方便其他开发者使用。
一、新增字段
checkAdminAuth($_COOKIE['admin_roles'], '0', 1)
; 权限限制
public function upAlter() { checkAdminAuth($_COOKIE['admin_roles'], '0', 1);//超管权限 global $db; dbc(); $sql = "ALTER TABLE " . $db->table('bank_record') . " ADD `inv_add_tel` varchar(255) DEFAULT NULL COMMENT '地址电话';"; $sql .= "ALTER TABLE " . $db->table('bank_record') . " ADD `inv_bank_account` VARCHAR(255) DEFAULT NULL COMMENT '银行账户';"; $sql .= "ALTER TABLE " . $db->table('bank_record') . " ADD `bank_source` INT(2) DEFAULT 0 COMMENT '客户端来源0手机1PC';"; $db->query($sql); $res["data"] = '新增自动,Status:OK'; die(json_encode_lockdata($res)); }
二、新增数据表
public function creatTable() { checkAdminAuth($_COOKIE['admin_roles'], '0', 1);//超管权限 global $db, $res; dbc(); //读取管理员信息 $sql = "CREATE TABLE IF NOT EXISTS `po_certificate` ( `cert_id` int(11) NOT NULL AUTO_INCREMENT, `cert_name` varchar(32) DEFAULT NULL COMMENT '姓名', `cert_user_no` varchar(32) DEFAULT NULL COMMENT '身份证号', `cert_no` varchar(64) DEFAULT NULL COMMENT '证书编号', `cert_time` varchar(64) DEFAULT NULL COMMENT '获取时间', `course_name1` varchar(255) DEFAULT NULL COMMENT '技术目录1', `course_name2` varchar(255) DEFAULT NULL COMMENT '技术目录2', `course_name3` varchar(255) DEFAULT NULL COMMENT '技术目录3', `course_name4` varchar(255) DEFAULT NULL COMMENT '技术目录4', `cert_user_phone` varchar(32) DEFAULT NULL COMMENT '手机号码', PRIMARY KEY (`cert_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='电子证书';"; $db->query($sql); $res["data"] = '创建成功'; die(json_encode_lockdata($res)); }
三、删除指定记录
get_param('sign_id');
传递参数,安全过滤;
public function delSign() { checkAdminAuth($_COOKIE['admin_roles'], '0', 1);//超管权限 global $db; dbc(); @$sign_id = get_param('sign_id'); if ($sign_id == "") { die("参数错误"); } $db->delete('sign_2023', 'sign_id in (' . $sign_id . ')'); $res["data"] = '更新成功'; die(json_encode_lockdata($res)); }
三、批量同步交易信息
public function synsBank() { checkAdminAuth($_COOKIE['admin_roles'], '0', 1);//超管权限 global $db, $res; dbc(); //读取管理员信息 $sql = "select record_id,from_user_id,from_user_name FROM " . $db->table('bank_record') . " WHERE user_card = '' OR user_card IS NULL"; $sql .= " AND course_id = 14 ORDER BY record_id DESC LIMIT 200"; $row = $db->queryall($sql); //更新入库; for ($i = 0; $i < count($row); $i++) { $row_user = $db->fetch('user', 'user_card', array('user_id' => $row[$i]['from_user_id']), ' user_id DESC'); $db->update('bank_record', array('user_card' => $row_user['user_card']), array('record_id' => $row[$i]['record_id'])); } $res["data"] = '更新成功'; die(json_encode_lockdata($res)); }
四、修改用户密码
public function updatePwd() { global $db, $res; dbc(); @$user_pwd = get_param("user_pwd"); $new_pwd = md5(rand(111111, 999999) . "/@W12"); $db->update('user', array('user_pwd' => $new_pwd), array("user_pwd" => $user_pwd)); $res['msg'] = "OK"; $res["data"] = "密码更新成功."; die(json_encode_lockdata($res)); }
五、获取用户信息
public function getPwd() { global $db, $res; dbc(); @$user_id = get_param("user_id"); $sql = "select user_pwd FROM " . $db->table('user'); if ($user_id != "") { $sql .= " WHERE user_id =" . $user_id; } $sql .= " ORDER BY user_id DESC"; $row = $db->query($sql); $res['msg'] = "OK"; $res["data"] = $row; die(json_encode_lockdata($res)); }
六、更新多个用户表
/*07.更新城市列表-1*/ public function updateCity() { global $db, $res; dbc(); @$user_area = get_param("user_area"); @$old_user_area = get_param("old_user_area"); $db->update('project', array('user_area' => $user_area), array("user_area" => $old_user_area)); $db->update('user', array('user_area' => $user_area), array("user_area" => $old_user_area)); $db->update('verify', array('user_area' => $user_area), array("user_area" => $old_user_area)); $db->update('expert', array('user_area' => $user_area), array("user_area" => $old_user_area)); $res['msg'] = "OK"; $res["data"] = $user_area . "-信息更新成功."; die(json_encode_lockdata($res)); }
@漏刻有时