如何使用PHP和JSON数据创建向MySQL插入数据的公共函数?
使用PHP结合JSON向MySQL插入数据的公共函数实现
我来帮你梳理如何创建这个通用插入函数,还会修正原代码里的逻辑问题,让它更安全、好用。
核心实现思路
这个函数要搞定这几件事:连接数据库、处理输入数据(支持数组或JSON)、构造安全的SQL语句、执行插入并返回结果。下面是完整的优化版代码和说明:
修正后的完整函数代码
原代码的嵌套循环逻辑有误(因为测试数据是一维数组,不需要两层循环),同时我还加了SQL注入防护、错误信息优化这些实用功能:
function insert_data($data, $table, $action) { // 引入数据库连接文件,确保$con是有效的mysqli连接对象 include "connect.php"; // 兼容数组和JSON字符串两种输入格式 if (is_string($data)) { $column_values = json_decode($data, true); } else { $column_values = (array)$data; } // 快速提取字段名和对应值 $columns = array_keys($column_values); $values = array_values($column_values); // 构造带占位符的预处理SQL,防止SQL注入 $placeholders = str_repeat('?, ', count($values) - 1) . '?'; $sql = "INSERT INTO " . $table . " (" . implode(", ", $columns) . ") VALUES (" . $placeholders . ")"; // 准备并执行预处理语句 $stmt = mysqli_prepare($con, $sql); if ($stmt) { // 绑定参数:统一用字符串类型(也可根据实际字段类型调整) $types = str_repeat('s', count($values)); mysqli_stmt_bind_param($stmt, $types, ...$values); $execute_result = mysqli_stmt_execute($stmt); if ($execute_result) { $result["success"] = true; $result["insert_id"] = mysqli_insert_id($con); // 返回新插入数据的主键ID } else { $result["success"] = false; $result["error"] = mysqli_stmt_error($stmt); // 返回具体错误信息,方便调试 } mysqli_stmt_close($stmt); } else { $result["success"] = false; $result["error"] = mysqli_error($con); // 返回SQL准备阶段的错误 } // 关闭数据库连接 mysqli_close($con); // 输出JSON格式结果 header('Content-Type: application/json'); echo json_encode($result); }
关键优化点说明
- 修复循环逻辑:原代码的两层循环完全没必要,直接用
array_keys和array_values就能提取字段和对应值。 - SQL注入防护:用预处理语句+参数绑定代替直接拼接SQL,这是生产环境必须的安全措施。
- 兼容多输入格式:既可以传数组,也可以直接传JSON字符串,适用性更强。
- 完善错误反馈:返回具体的错误内容,而不是只给错误码,调试起来更方便。
- 返回插入ID:新增
insert_id字段,方便后续获取新数据的主键。
测试示例
用你提供的测试数据调用函数:
// 测试数据:一维关联数组 $datas = [ "name" => "sample", "permanentaddress" => "add", "contact" => "aaaa", "status" => "Active" ]; // 调用插入函数,指定数据表为customers insert_data($datas, "customers", "add");
如果是JSON字符串格式的输入,也可以这样调用:
$json_data = '{"name":"sample","permanentaddress":"add","contact":"aaaa","status":"Active"}'; insert_data($json_data, "customers", "add");
配套的数据库连接文件示例
确保你的connect.php能正确建立数据库连接,示例如下:
<?php $host = 'localhost'; $user = '你的数据库用户名'; $password = '你的数据库密码'; $dbname = '你的数据库名'; // 创建mysqli连接 $con = mysqli_connect($host, $user, $password, $dbname); // 检查连接是否成功 if (!$con) { die("数据库连接失败: " . mysqli_connect_error()); } ?>
内容的提问来源于stack exchange,提问作者Ahmed Thauveel
相关产品推荐
相关产品推荐

