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

如何将Bootstrap Table对应的JavaScript数组保存到数据库?

如何将Bootstrap Table对应的JavaScript数组保存到数据库?

看起来你已经用Bootstrap Table搭好可编辑表格了,要把数据存到数据库其实分两种常见场景:单个单元格编辑后自动保存,或者一次性批量保存整个表格的数组,我给你分别捋清楚步骤:

场景1:单个单元格编辑后自动保存

你已经通过$proj_table.editable.defaults.url = "php/save.php"指定了保存接口,Bootstrap Table的editable插件会在你编辑完单元格后,自动把修改的数据以POST请求发送到这个PHP文件。你只需要在save.php里处理接收参数并更新数据库就行。

后端save.php示例代码

<?php
// 替换成你自己的数据库连接信息
$db_host = 'localhost';
$db_user = '你的数据库用户名';
$db_pass = '你的数据库密码';
$db_name = '你的数据库名';
$table_name = '你的数据表名';

// 建立数据库连接(这里用mysqli,你也可以用PDO)
$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$conn) {
    die(json_encode(['status' => 'error', 'msg' => '数据库连接失败: ' . mysqli_connect_error()]));
}

// 接收前端发送的参数:pk是行主键(你的ID字段),name是编辑的字段名,value是新值
$pk = isset($_POST['pk']) ? intval($_POST['pk']) : 0;
$field = isset($_POST['name']) ? mysqli_real_escape_string($conn, $_POST['name']) : '';
$value = isset($_POST['value']) ? mysqli_real_escape_string($conn, $_POST['value']) : '';

// 校验参数合法性
if ($pk <= 0 || empty($field)) {
    echo json_encode(['status' => 'error', 'msg' => '参数错误']);
    exit;
}

// 用预处理语句防止SQL注入,这一步很重要!
$sql = "UPDATE `{$table_name}` SET `{$field}` = ? WHERE ID = ?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "si", $value, $pk); // s表示字符串,i表示整数,根据字段类型调整

// 执行更新并返回结果
if (mysqli_stmt_execute($stmt)) {
    echo json_encode(['status' => 'success']);
} else {
    echo json_encode(['status' => 'error', 'msg' => '更新失败: ' . mysqli_error($conn)]);
}

// 关闭连接和语句
mysqli_stmt_close($stmt);
mysqli_close($conn);
?>

场景2:批量保存整个表格的JavaScript数组

如果你想一次性把表格所有数据(也就是bootstrapTable('getData')获取到的JS数组)保存到数据库,可以用AJAX把数组发送到后端,然后批量处理。

前端代码(添加批量保存按钮事件)

// 假设你有一个ID为save-all-btn的按钮
$('#save-all-btn').on('click', function() {
    // 获取表格所有数据的JS数组
    const tableData = $proj_table.bootstrapTable('getData');
    
    // 发送AJAX请求到后端
    $.ajax({
        url: 'php/save_all.php',
        method: 'POST',
        data: { table_data: JSON.stringify(tableData) }, // 把数组转成JSON字符串发送
        dataType: 'json',
        success: function(res) {
            if (res.status === 'success') {
                alert('批量保存成功!');
            } else {
                alert('保存失败:' + res.msg);
            }
        },
        error: function() {
            alert('请求服务器失败,请稍后再试');
        }
    });
});

后端save_all.php示例代码

<?php
$db_host = 'localhost';
$db_user = '你的数据库用户名';
$db_pass = '你的数据库密码';
$db_name = '你的数据库名';
$table_name = '你的数据表名';

$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$conn) {
    die(json_encode(['status' => 'error', 'msg' => '数据库连接失败']));
}

// 接收并解析前端发送的JSON数据
if (!isset($_POST['table_data'])) {
    echo json_encode(['status' => 'error', 'msg' => '未接收到数据']);
    exit;
}
$tableData = json_decode($_POST['table_data'], true);
if (!is_array($tableData)) {
    echo json_encode(['status' => 'error', 'msg' => '数据格式错误']);
    exit;
}

// 开启事务,保证批量操作的原子性(要么全成功,要么全失败)
mysqli_begin_transaction($conn);

try {
    foreach ($tableData as $row) {
        $id = isset($row['ID']) ? intval($row['ID']) : 0;
        $project = isset($row['project']) ? mysqli_real_escape_string($conn, $row['project']) : '';
        $owner = isset($row['owner']) ? mysqli_real_escape_string($conn, $row['owner']) : '';
        $name1 = isset($row['name_1']) ? mysqli_real_escape_string($conn, $row['name_1']) : '';

        if ($id > 0) {
            // 如果ID存在,执行更新操作
            $sql = "UPDATE `{$table_name}` SET project = ?, owner = ?, name_1 = ? WHERE ID = ?";
            $stmt = mysqli_prepare($conn, $sql);
            mysqli_stmt_bind_param($stmt, "sssi", $project, $owner, $name1, $id);
        } else {
            // 如果ID不存在,执行新增操作
            $sql = "INSERT INTO `{$table_name}` (project, owner, name_1) VALUES (?, ?, ?)";
            $stmt = mysqli_prepare($conn, $sql);
            mysqli_stmt_bind_param($stmt, "sss", $project, $owner, $name1);
        }

        if (!mysqli_stmt_execute($stmt)) {
            throw new Exception('处理数据失败: ' . mysqli_error($conn));
        }
        mysqli_stmt_close($stmt);
    }

    // 提交事务
    mysqli_commit($conn);
    echo json_encode(['status' => 'success']);
} catch (Exception $e) {
    // 出错则回滚所有操作
    mysqli_rollback($conn);
    echo json_encode(['status' => 'error', 'msg' => $e->getMessage()]);
}

mysqli_close($conn);
?>

几个重要注意事项

  • 防止SQL注入:一定要用预处理语句(mysqli_prepare),绝对不能直接把用户输入拼进SQL语句里,否则会有严重安全风险。
  • 参数替换:把代码里的数据库连接信息、表名、字段名替换成你自己的实际信息。
  • 事务的使用:批量保存时用事务可以避免部分数据成功、部分失败的情况,保证数据一致性。
  • 字段类型匹配:绑定参数时的类型(比如s字符串、i整数)要和数据库字段类型对应,避免出错。

内容的提问来源于stack exchange,提问作者The_Babu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:38:01