You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:19:45