第20天:带参数查询与动态接口基础(? 占位符 + req.params)

4 阅读2分钟

今天掌握了 mysql2 的核心查询方式: ? 占位符,并理解了它将来如何与 Express 的 req.params.id 配合,实现动态接口。


一、今日核心代码

1. 带参数查询(单个用户)

javascript

const mysql = require('mysql2');

const connection = mysql.createConnection({
    host: 'localhost',
    port: 3307,                // 无人机项目专用数据库
    user: 'root',
    password: 'you_password',//输入自己的端口密码
    database: 'drone_platform'
});

// 带参数的查询(核心)
const userId = 1;              // 将来它来自 req.params.id
const sqlOne = "SELECT * FROM users WHERE id = ?";
connection.query(sqlOne, [userId], (err, results) => {
    if (err) throw err;
    console.log("id 为 1 的用户:", results[0]);  // results 是数组,取第一个
});

connection.end();

2. 查询所有用户(复习)

javascript

const sqlAll = "SELECT * FROM users";
connection.query(sqlAll, (err, results) => {
    if (err) {
        console.log('查询失败:', err.message);
        return;
    }
    console.log('📋 users 表数据:', results);
});

二、今日核心理解

概念解释
? 占位符SQL 语句中的占位标记,用于动态传入值
[userId]替换 ? 的数组,按顺序一一对应
results[0]查询结果始终是数组,取第一条数据用 [0]
req.params.idExpress 中获取动态路由 /users/:id 的 id 值
connection.end()关闭数据库连接,否则进程不会自动退出

三、? 占位符与 Express 动态路由的关系

现在写的:

javascript

const userId = 1;
connection.query("SELECT * FROM users WHERE id = ?", [userId], ...);

后面整合到 Express 接口时:

javascript

app.get('/users/:id', (req, res) => {
    const userId = req.params.id;        // 从 URL 获取动态 id
    const sql = "SELECT * FROM users WHERE id = ?";
    connection.query(sql, [userId], (err, results) => {
        res.json(results[0]);
    });
});

用户访问 /users/1 → 返回 id=1 的用户数据。
? 占位符是连接“动态路由”和“数据库查询”的桥梁。


四、今日踩的坑 & 解决

原因解决
进程一直不退出,需按 Ctrl + C没有调用 connection.end()查询完成后执行 connection.end()
变量拼写错误(如 USERS 写成 USRRSVS Code 不检查 SQL 里的表名和列名对照数据库里的真实表名手打,或安装 SQL 插件
PowerShell 跑 node 权限报错Windows 执行策略限制切换成 cmd 终端(VS Code 下拉选择)
查询结果取不到值忘记 results 是数组,直接用了 results.id用 results[0].id 或解构
多个占位符传值错误数组顺序与 ? 顺序不一致确保 [值1, 值2] 与 SQL 中 ? 的顺序一致

五、今日小成就

  • 独立完成带参数查询(WHERE id = ?
  • 理解 results 始终是数组,取第一条用 [0]
  • 理解将来如何与 req.params.id 结合
  • 知道 connection.end() 的作用和必要性
  • 从 PowerShell 切到 cmd 解决权限问题
  • 手打 SQL 多遍,加深期末语法记忆