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

如何编写Express代码实现MySQL数据库商品名称模糊查询?

解决MySQL模糊匹配商品的问题

你当前代码的核心问题是使用了精确匹配的=操作符,这只会返回名称和输入完全一致的商品。要实现“包含指定字符”的模糊查询,需要改用MySQL的LIKE操作符配合通配符%。

修改后的代码示例

app.get('/models/:name', (req, res, next) => {
  const connection = getConnection();
  // 使用LIKE和通配符%,%表示任意长度的任意字符
  const queryStr = 'SELECT * FROM products WHERE name LIKE ?';
  const modelName = `%${req.params.name}%`; // 给参数前后加上%,实现包含匹配

  connection.query(queryStr, [modelName], (err, rows, fields) => {
    if (err) {
      // 统一错误响应,避免多次send导致的问题
      return res.status(500).send('<h1>500 Server Error</h1> Sorry for the inconvenience, we are fixing it!');
    }
    console.log('Query executed successfully');
    res.json(rows);
  });
});

关键修改点说明

  • SQL语句调整:把name=?改成name LIKE ?,LIKE是MySQL专门用于模糊匹配的操作符。
  • 通配符使用:%是通配符,%samsung%表示匹配任何包含samsung的字符串(不管前后有什么字符)。如果只需要前缀匹配可以用samsung%,后缀匹配用%samsung。
  • 错误处理优化:原代码中res.send后又调用res.sendStatus会导致响应重复发送,改用res.status(500).send()一次性设置状态码和响应内容,并且用return终止后续代码执行。
  • 安全性:保持使用参数化查询(把modelName放在数组里传给query方法),避免直接拼接SQL字符串导致的SQL注入风险。

额外提示

如果你的商品名称区分大小写,可以在查询里加上LOWER()函数统一大小写,比如:

SELECT * FROM products WHERE LOWER(name) LIKE LOWER(?)

这样用户输入samsung或者Samsung都会返回相同的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:45:50