Node.js中使用mssql包如何在查询中结合LIKE与输入参数?
解决mssql NPM包的LIKE查询问题
我之前也遇到过这个困扰!mssql的文档确实没明确提及LIKE查询的具体用法,但其实它的参数化查询机制完全支持这类需求,给你两种靠谱的实现方式:
1. 推荐:模板字符串参数化查询(最安全)
这种写法是mssql官方推荐的方式,会自动处理参数绑定,彻底避免SQL注入风险:
const sql = require('mssql'); async function searchUsers(usernameKeyword) { try { // 先建立数据库连接 await sql.connect('你的数据库连接字符串'); // 使用模板字符串编写带参数的查询 const queryResult = await sql.query` SELECT * FROM Users WHERE Username LIKE '%${usernameKeyword}%' `; // 处理查询结果 console.log('查询到的用户:', queryResult.recordset); } catch (error) { console.error('查询出错:', error); } finally { // 记得关闭连接 await sql.close(); } } // 调用示例:查找用户名包含"john"的用户 searchUsers('john');
2. 备选:使用Request对象的input方法
如果更习惯用Request对象管理查询参数,也可以通过以下两种方式实现:
方式一:在参数中加入通配符
async function searchUsers(usernameKeyword) { try { await sql.connect('你的数据库连接字符串'); const request = new sql.Request(); // 将通配符与搜索关键词拼接后作为参数传入 request.input('keyword', sql.VarChar, `%${usernameKeyword}%`); const queryResult = await request.query(` SELECT * FROM Users WHERE Username LIKE @keyword `); console.log('查询到的用户:', queryResult.recordset); } catch (error) { console.error('查询出错:', error); } finally { await sql.close(); } }
方式二:在SQL语句中拼接通配符
async function searchUsers(usernameKeyword) { try { await sql.connect('你的数据库连接字符串'); const request = new sql.Request(); // 直接传入纯关键词参数 request.input('keyword', sql.VarChar, usernameKeyword); // 在SQL语句中用+拼接通配符 const queryResult = await request.query(` SELECT * FROM Users WHERE Username LIKE '%' + @keyword + '%' `); console.log('查询到的用户:', queryResult.recordset); } catch (error) { console.error('查询出错:', error); } finally { await sql.close(); } }
重要提醒
绝对不要直接将用户输入拼接进SQL字符串(比如const query = "SELECT * FROM Users WHERE Username LIKE '%" + username + "%'"),这种写法会导致严重的SQL注入漏洞,一定要使用上面的参数化查询方式。
内容的提问来源于stack exchange,提问作者Sir Rubberduck
相关产品推荐
相关产品推荐

