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

Node.js中参数化查询实现及查询行数输出异常解决

解决方案

1. 转换为参数化查询

原代码用字符串拼接参数存在SQL注入风险,改成参数化查询只需利用pool.execute的参数占位功能:

static async addServiceDetail(shopId,serviceId,genderTypeId,price,serviceName) {
    // 用?作为参数占位符,避免直接拼接字符串
    const sql = `SELECT id from hc_servicesdetail WHERE shopId=? AND serviceId=? AND genderTypeId=?`;
    // 将参数以数组形式传入execute方法
    const [rows, fields] = await pool.execute(sql, [shopId, serviceId, genderTypeId]);
    // 后续代码
}

这种方式不仅能防范SQL注入,还能避免参数含特殊字符导致的SQL语法错误。

2. 正确获取查询总行数

你看到[object object]是因为rows是数组对象,直接和字符串拼接会触发默认的toString方法。要获取总行数,取数组的length属性即可:

static async addServiceDetail(shopId,serviceId,genderTypeId,price,serviceName) {
    const sql = `SELECT id from hc_servicesdetail WHERE shopId=? AND serviceId=? AND genderTypeId=?`;
    const [rows, fields] = await pool.execute(sql, [shopId, serviceId, genderTypeId]);
    // 用模板字符串打印行数
    console.log(`total rows are ${rows.length}`);
    // 判断条件要改成检查length,不能直接用数组和数字比较
    if(rows.length < 1) {
        // further code  
    }
}

原代码里if(rows <1)永远不会生效,因为数组和数字比较会被转为NaN,NaN和任何数字比较结果都是false,必须通过rows.length判断结果集行数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:02:20