javascript - 如何使用 javascript 将值传递给 sql 语句?
问题描述
我正在尝试使我的 sql 语句对于我正在开发的 API 更加安全。虽然我知道有 ORM 工具可以让这更容易,但我是新手,想了解基础知识和最佳实践。我首先创建了一个将值连接成字符串的 sql 语句。在我之前的一篇文章中建议它会使我容易受到 SQL 注入的攻击。我尝试了推荐的方法,但没有成功。用作占位符的问号从未被我试图传递的值替换。
注意:虽然相关,但它不是 [ Passing a node.js parameter in sql query的重复。用法和解决方案略有不同。
任何帮助将不胜感激!
我尝试了几种方法,但每次?从未被取代。我可以在控制台中看到这一点。我还记录了“id”的值,以确保在函数范围内的该级别上有一个值要传递。
注意:这源于以下问题:How do I insert a value into a select statement using JavaScript, 特别是在使用 express 和 postgres 时?
这有效,但不是很安全......
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 = ?
解决方案
使用 Node.js 将 $ 用作占位符而不是问号。
例子:
return db.query('SELECT * FROM users WHERE id = $1',[id]);
推荐阅读
- robotframework - 使用机器人框架操作系统库
- typescript - 如何使用 leaflet-draw 绘制折线以仅获取显示的虚线然后禁用插件?
- oozie - 如何在工作流开始之前终止/取消协调器操作?
- activemq-artemis - 复制的 ActiveMQ Artemis 服务器 - 不复制消息
- javascript - 如何从 react-native-fs 中的隐藏文件夹访问文件
- text - TYPOSCRIPT:stdWrap.replacement 仅在文本字段中
- ms-access-2013 - MS Access 2013 表单显示“记录已锁定以供其他用户编辑”以及由谁编辑
- solr - Solr 中的独立托管资源具有相同的 configSet
- javascript - 用 in 字符串替换两个索引之间的多个字符串
- java - Android Java 将视频从 url 保存到图库 API 19-30