首页 > 解决方案 > 如何使用 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 = ?

标签: javascriptsqlnode.jspostgresql

解决方案


使用 Node.js 将 $ 用作占位符而不是问号。

例子:

return db.query('SELECT * FROM users WHERE id = $1',[id]);

推荐阅读