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

如何创建运行自定义数据库及实现宠物站货币系统数据库操作?

我来一步步帮你解决这两个问题,都是PHP+数据库开发里的基础但关键的点:

1. 创建并运行自定义数据库的完整流程

咱们用最常用的MySQL/MariaDB + PHP组合来实现,这也是你宠物网站最适配的技术栈:

  • 第一步:准备数据库环境
    本地开发的话,直接装XAMPP或者WAMP,自带MySQL、PHP和phpMyAdmin(可视化管理工具);线上部署的话,找你的主机服务商提供的数据库管理面板(一般都有phpMyAdmin)。

  • 第二步:创建数据库
    打开phpMyAdmin,输入数据库名(比如pet_website),点击「创建」就行;或者用SQL命令执行:

    CREATE DATABASE pet_website;
    
  • 第三步:创建业务需要的表
    比如先创建用户表(货币数据可以存在这里,小项目合并更方便,不用单独建货币表):

    USE pet_website;
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY, -- 用户唯一ID
        username VARCHAR(50) NOT NULL UNIQUE, -- 用户名
        coins INT DEFAULT 50, -- 初始货币50,和你之前的硬编码对应
        created_at DATETIME DEFAULT CURRENT_TIMESTAMP
    );
    
  • 第四步:PHP连接数据库
    推荐用PDO(比mysqli更安全、灵活),创建一个db_connect.php文件:

    <?php
    $host = 'localhost'; // 本地是localhost,线上看主机配置
    $dbname = 'pet_website';
    $username = 'root'; // 本地默认root,线上用主机给的用户名
    $password = ''; // 本地默认空,线上填主机给的密码
    
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch(PDOException $e) {
        die("数据库连接失败: " . $e->getMessage());
    }
    ?>
    
2. 货币系统的数据库实现方案(替代硬编码)

你之前的$coin=50是固定值,没法区分不同用户,也没法持久化,现在改成数据库存储后,就能实现每个用户独立的货币数据,并且支持增减操作:

核心逻辑梳理

用户点击物品→后端验证用户身份+货币余额→执行增减操作→返回结果给前端

具体实现步骤

  1. 先确保用户已登录(获取用户ID)
    你需要有登录逻辑,把用户ID存在Session里,比如登录成功后:

    session_start();
    $_SESSION['user_id'] = $user_id; // 从数据库查询到的当前登录用户ID
    
  2. 查询用户当前货币
    在需要展示货币的页面,引入db_connect.php后查询:

    session_start();
    require 'db_connect.php';
    
    if (!isset($_SESSION['user_id'])) {
        die("请先登录");
    }
    
    $user_id = $_SESSION['user_id'];
    $stmt = $pdo->prepare("SELECT coins FROM users WHERE id = ?");
    $stmt->execute([$user_id]);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);
    $current_coins = $user['coins'];
    echo "当前货币: " . $current_coins;
    
  3. 实现货币增减操作(比如购买道具扣币)
    创建一个update_coins.php处理请求:

    session_start();
    require 'db_connect.php';
    
    if (!isset($_SESSION['user_id']) || !isset($_POST['action'])) {
        echo json_encode(['success' => false, 'msg' => '参数错误']);
        exit;
    }
    
    $user_id = $_SESSION['user_id'];
    $action = $_POST['action']; // 比如'add'或'deduct'
    $amount = (int)$_POST['amount'];
    
    try {
        // 开启事务,保证数据一致性
        $pdo->beginTransaction();
    
        if ($action === 'deduct') {
            // 先检查余额是否足够
            $stmt = $pdo->prepare("SELECT coins FROM users WHERE id = ?");
            $stmt->execute([$user_id]);
            $user = $stmt->fetch(PDO::FETCH_ASSOC);
            if ($user['coins'] < $amount) {
                throw new Exception("余额不足");
            }
            $sql = "UPDATE users SET coins = coins - ? WHERE id = ?";
        } else if ($action === 'add') {
            $sql = "UPDATE users SET coins = coins + ? WHERE id = ?";
        } else {
            throw new Exception("无效操作");
        }
    
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$amount, $user_id]);
        $pdo->commit();
    
        // 返回更新后的余额
        $stmt = $pdo->prepare("SELECT coins FROM users WHERE id = ?");
        $stmt->execute([$user_id]);
        $new_coins = $stmt->fetchColumn();
        echo json_encode(['success' => true, 'new_coins' => $new_coins]);
    } catch(Exception $e) {
        $pdo->rollBack();
        echo json_encode(['success' => false, 'msg' => $e->getMessage()]);
    }
    
  4. 前端点击事件(用AJAX异步更新)
    比如页面上的购买按钮:

    <div>当前货币: <span id="coins-display"><?php echo $current_coins; ?></span></div>
    <button class="buy-item" data-cost="10">购买宠物零食(10币)</button>
    
    <script>
        document.querySelectorAll('.buy-item').forEach(button => {
            button.addEventListener('click', async () => {
                const cost = parseInt(button.dataset.cost);
                const response = await fetch('update_coins.php', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded',
                    },
                    body: `action=deduct&amount=${cost}`
                });
                const result = await response.json();
                if (result.success) {
                    document.getElementById('coins-display').textContent = result.new_coins;
                    alert('购买成功!');
                } else {
                    alert(result.msg);
                }
            });
        });
    </script>
    

关键注意事项

  • SQL注入防护:全程用PDO的预处理语句(prepare+execute绑定参数),绝对不要直接把用户输入拼到SQL里。
  • 用户身份验证:必须通过Session验证用户ID,不能让用户随便修改别人的货币。
  • 事务处理:在更新货币时开启事务,避免中途出错导致数据不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:11:24