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

如何将$scope.table = []及$scope.decks数据插入MySQL数据库?

实现$scope.decks和$scope.table插入MySQL的简便方法

首先得明确:前端AngularJS没法直接操作MySQL,必须通过后端API接口中转,这是最安全也最标准的做法。下面给你一套简单可行的流程,我用Node.js(Express)做后端示例,你也可以换成PHP/Python这些你熟悉的语言。

第一步:前端打包数据,发送请求到后端

在你的AngularJS控制器里,新增一个函数把$scope.decks和$scope.table的数据打包,用$http服务发给后端接口:

// 假设你的控制器结构如下
app.controller('DeckBuilderCtrl', function($scope, $http) {
  // 你已有的卡片推入逻辑...

  // 新增保存到数据库的函数
  $scope.saveToDatabase = function() {
    // 把需要保存的两个数组打包成一个对象
    const payload = {
      decks: $scope.decks,
      table: $scope.table
    };

    // 发送POST请求到后端接口
    $http.post('/api/save-deck', payload)
      .then(res => {
        alert('卡组数据已成功保存到数据库!');
        console.log('保存详情:', res.data);
      })
      .catch(err => {
        console.error('保存失败:', err);
        alert('保存出错了,可查看控制台日志排查');
      });
  };
});

然后在页面里加个触发按钮:

<button ng-click="saveToDatabase()">保存卡组到数据库</button>

第二步:后端搭建API接口(Node.js/Express示例)

  1. 先安装依赖:
npm install express mysql2 cors
  1. 编写server.js后端文件:
const express = require('express');
const mysql = require('mysql2');
const cors = require('cors');
const app = express();

// 配置跨域(解决前后端端口不同的跨域问题)
app.use(cors());
// 解析JSON格式的请求体
app.use(express.json());

// 配置MySQL连接信息
const db = mysql.createConnection({
  host: 'localhost',       // 你的数据库地址
  user: 'your_db_user',    // 数据库用户名
  password: 'your_db_pwd', // 数据库密码
  database: 'deck_db'      // 你要使用的数据库名
});

// 连接数据库
db.connect(err => {
  if (err) {
    console.error('数据库连接失败:', err);
    return;
  }
  console.log('成功连接到MySQL数据库');
});

// 处理前端的保存请求
app.post('/api/save-deck', (req, res) => {
  const { decks, table } = req.body;

  // 1. 插入decks数组到decks表(请根据你的卡片字段调整表结构和字段)
  const deckInsertQuery = 'INSERT INTO decks (card_name, card_type, card_cost) VALUES ?';
  // 把数组对象转换成MySQL批量插入需要的二维数组格式
  const deckValues = decks.map(card => [card.name, card.type, card.cost]);

  db.query(deckInsertQuery, [deckValues], (err, deckRes) => {
    if (err) return res.status(500).json({ error: '插入卡组失败', details: err });

    // 2. 插入table数组到table_data表(同理,根据你的table字段调整)
    const tableInsertQuery = 'INSERT INTO table_data (col1, col2) VALUES ?';
    const tableValues = table.map(item => [item.col1, item.col2]);

    db.query(tableInsertQuery, [tableValues], (err, tableRes) => {
      if (err) return res.status(500).json({ error: '插入table数据失败', details: err });

      // 两个表都插入成功,返回结果
      res.json({
        message: '数据保存成功',
        decksInserted: deckRes.affectedRows,
        tableInserted: tableRes.affectedRows
      });
    });
  });
});

// 启动后端服务
const PORT = 3001;
app.listen(PORT, () => console.log(`后端服务运行在 http://localhost:${PORT}`));

第三步:创建MySQL数据库表

先在MySQL里创建对应的数据表,示例SQL如下(请根据你的实际字段调整):

-- 创建存储卡组的decks表
CREATE TABLE decks (
  id INT AUTO_INCREMENT PRIMARY KEY,
  card_name VARCHAR(255) NOT NULL,
  card_type VARCHAR(100),
  card_cost INT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 创建存储table数据的table_data表
CREATE TABLE table_data (
  id INT AUTO_INCREMENT PRIMARY KEY,
  col1 VARCHAR(255),
  col2 TEXT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

可选:PHP后端简化版本

如果你更熟悉PHP,可以写一个简单的接口文件save_deck.php:

<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json");
header("Access-Control-Allow-Methods: POST");

// 连接数据库
$conn = new mysqli('localhost', 'your_db_user', 'your_db_pwd', 'deck_db');
if ($conn->connect_error) die(json_encode(['error' => '数据库连接失败']));

// 接收前端传来的JSON数据
$data = json_decode(file_get_contents("php://input"), true);
$decks = $data['decks'];
$table = $data['table'];

// 插入decks数据
$stmt = $conn->prepare("INSERT INTO decks (card_name, card_type, card_cost) VALUES (?, ?, ?)");
foreach ($decks as $card) {
  $stmt->bind_param("ssi", $card['name'], $card['type'], $card['cost']);
  $stmt->execute();
}

// 插入table数据
$stmtTable = $conn->prepare("INSERT INTO table_data (col1, col2) VALUES (?, ?)");
foreach ($table as $item) {
  $stmtTable->bind_param("ss", $item['col1'], $item['col2']);
  $stmtTable->execute();
}

echo json_encode(['message' => '数据保存成功']);
$conn->close();
?>

此时前端的$http.post地址改成'/save_deck.php'即可。

重要注意事项

  • 数据验证:后端一定要校验前端传来的数据,比如卡片名称不能为空、数字字段必须是合法数字,避免脏数据插入。
  • 事务处理:如果decks和table的数据是关联的,建议使用数据库事务,确保要么都插入成功,要么都回滚,避免数据不一致。
  • 安全防护:不要把数据库密码硬编码在代码里,用环境变量管理;生产环境要限制CORS的允许域名,只开放你的前端域名;始终使用参数化查询(示例中已使用)防止SQL注入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:31:09