【发布时间】:2019-09-14 20:35:34
【问题描述】:
我正在尝试使我的 sql 语句对于我正在开发的 API 更加安全。虽然我知道有 ORM 工具可以让这更容易,但我是新手,想了解基础知识和最佳实践。我首先创建了一个将值连接成字符串的 sql 语句。在我之前的一篇文章中建议它会使我容易受到 SQL 注入的影响。我尝试了推荐的方法,但没有成功。用作占位符的问号从未被我试图传递的值替换。
注意:虽然相关,但它不是 [Passing a node.js parameter in sql query 的重复。用法和解决方案略有不同。
任何帮助将不胜感激!
我尝试了几种方法,但每次都是?从未被取代。我可以在控制台中看到这一点。我还记录了“id”的值,以确保在函数范围内的该级别有一个值要传递。
这可行,但不是很安全...
return db.query(`SELECT * FROM users WHERE id = ${id}`);
以下方法均无效...
return db.query('SELECT * FROM `users` WHERE `id` = ?',['id']);
return db.query('SELECT * FROM users WHERE id = ?',['id']);
return db.query('SELECT * FROM users WHERE id = ?',[id]);
return db.query('SELECT * FROM users WHERE id = ?',id);
return db.query(`SELECT * FROM users WHERE id = ?`,id);
每次控制台显示以下...
QUERY: SELECT * FROM users WHERE id = ?
【问题讨论】:
-
链接
db.js的官方文档 -
docs 表示需要使用
$1、$2等 -
@ChrisG 谢谢!这解决了我的问题。
-
注意:虽然相关,但不是[stackoverflow.com/questions/47538998/…的重复。用法和解决方案略有不同。
标签: javascript sql node.js postgresql