我正在使用nodejs和mysql npm包,我试图从一个表中选择other_text =
这是它的样子:
var query = connection.query(`SELECT id FROM ${tableName} WHERE other_text = ?`,
attributeName.other_text, function (err, rows) {
...
我看过那个使用?将自动转义用户输入的字符串。在我看到的大多数示例中,它们在查询函数的第二个参数周围都有括号,如下所示:
var query = connection.query(`SELECT id FROM ${tableName} WHERE other_text = ?`,
[attributeName.other_text], function (err, rows) {
...
是否需要括号以逃避传入的字符串?它在我尝试时起作用,但我甚至不知道如何测试SQL注入,所以我不知道括号是否必要或甚至是正确的。
谢谢。
答案 0 :(得分:1)
括号代表一个数组。如果您想要在查询中使用更多值,则可以使用数组。
例如,假设您要从表中选择多个列,并且希望将它们传递给语句,您可以使用以下内容:
connection.query(`SELECT ?? FROM ${tableName}`,
[col1, col2, col3], function (err, rows) {
它也可以与字符串,数字甚至对象结合使用。假设您要从Users表表更新ID为1的用户。你会做这样的事情:
const tableName = 'users';
const whereCondition = {id: 1};
const whaToUpdate = {name: 'newName'}
const mysql = require('mysql');
const statement = mysql.format('update ?? set ? where ?', [tableName, whaToUpdate , whereCondition]);
我还建议使用.format来更好地阅读代码。 最后你会有这样的事情:
connection.query(statement, (error, result, fields) => { });