Node.js使用SQLite时LIKE操作符参数查询返回undefined问题
解决SQLite查询返回undefined的问题
嘿,我瞅了你的代码,问题大概率出在LIKE子句的参数化写法上,另外还有几个容易忽略的点也得补上,咱们一步步来搞定:
1. 先修正LIKE语句的参数化逻辑
你现在把$input套在了"%$input%"的引号里,SQLite的参数化查询压根不会解析引号里的占位符,结果就是实际执行的SQL是LIKE "%$input%",根本没把name的值替换进去!正确的写法有两种:
方式一:用问号占位符(更通用)
db.all('SELECT * FROM houses WHERE location LIKE ?', [`%${name}%`], (error, rows) => { // 先处理错误!这步绝对不能省 if (error) { console.error('查询翻车了:', error); return res.status(500).send('查询失败'); } // 确保没数据时返回空数组,而不是undefined res.send(rows || []); });
方式二:用命名参数(如果你习惯这种写法)
db.all('SELECT * FROM houses WHERE location LIKE $input', { $input: `%${name}%` }, (error, rows) => { if (error) { console.error('查询出错:', error); return res.status(500).send('查询失败'); } res.send(rows || []); });
2. 必须加上错误处理
你原来的代码完全没管error参数!如果查询过程中出了问题(比如表名拼错、语法错误),rows就会是undefined,你还完全不知道为啥。所以一定要先判断error,打印错误信息或者返回给前端,这样才能快速定位问题。
3. 排查其他潜在问题
- 先确认
name变量有没有值:在查询前加个console.log('当前查询的关键词:', name),看看是不是传了空值或者不是你预期的内容。 - 检查数据库表和字段:确保表名是
houses,字段是location,别拼错了(SQLite默认大小写不敏感,但最好和代码里保持一致)。 - 手动跑一遍SQL:直接在SQLite客户端执行
SELECT * FROM houses WHERE location LIKE "%你的测试关键词%",看看数据库里到底有没有匹配的记录,别是数据库本身就没数据。
按上面的方法调整后,应该就能解决返回undefined的问题了。要是还不行,把错误信息和name的值贴出来,咱们再接着排查~
内容的提问来源于stack exchange,提问作者Klejdi Sevdari
相关产品推荐
相关产品推荐

