简体   繁体   English

如何使用 JS 从键值数组为 sqlite UPDATE 构建准备好的语句?

[英]How can I use JS to build a prepared statement for a sqlite UPDATE from an array of key values?

I want to build a function that builds a prepared statement for a SQlite UPDATE query.我想构建一个 function,它为 SQlite UPDATE 查询构建一个准备好的语句。 My current approach is to simply build a string and send this sql to the database.我目前的做法是简单地构建一个字符串并将这个 sql 发送到数据库。 But you can only do that if you don't care about security at all;-)但是,只有在您根本不关心安全性的情况下,您才能这样做;-)

My current function:我现在的function:

const newBrandData = {name: "def"};
const brand = {id: 1, name: "abc", prop1: ""};

update(brand, newBrandData) {
    const keyValues = [];
    Object.keys(newBrandData).forEach(e => {
        keyValues.push(`${e} = "${newBrandData[e]}"`)
    });
        
    const sql = `UPDATE ${this.table} SET ${keyValues.toString()} WHERE id = ?`;
    const params = [brand.id];

    return this.run(sql, params);
}

Not sure if I understood your question, but you can avoid concatenating key values by using placeholders everywhere:不确定我是否理解你的问题,但你可以通过在各处使用占位符来避免连接键值:

const keyValues = [];
const params = [];
Object.keys(newBrandData).forEach(e => {
  keyValues.push(`${e} = ?`);
  params.push(newBrandData[e]);
});
const sql = `UPDATE ${this.table} SET ${keyValues.toString()} WHERE id = ?`;
params.push(brand.id);

You are definitely on the right track.你绝对是在正确的轨道上。 You only have to change two things:你只需要改变两件事:

  1. replace keyValues.push( ${e} = "${newBrandData[e]}" ) with keyValues.push( ${e} =? ) `.keyValues.push( ${e} = "${newBrandData[e]}" )替换为keyValues.push( ${e} =? ) `。

  2. replace const params = [brand.id];替换const params = [brand.id]; with const params = [...Object.values(newBrandData), brand.id]; with const params = [...Object.values(newBrandData), brand.id];

update(brand, newBrandData) {
    const keyValues = [];
    Object.keys(newBrandData).forEach(e => {
        keyValues.push(`${e} = ?`)
    });
        
    const sql = `UPDATE ${this.table} SET ${keyValues.toString()} WHERE id = ?`;
    
    const params = [...Object.values(newBrandData), brand.id];
    return this.run(sql, params)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在Express.js中使用值数组和预准备语句更新MySQL中的表? - How do I update a table in MySQL using an array of values and a prepared statement in Express.js? 如何使更新准备好的语句在 Node JS 的 JavaScript 中工作 - How can I make a update prepared statement work in JavaScript in Node JS 如何在准备好的语句(在jsp中)中使用jquery变量? - How can I use jquery variable in prepared statement (in jsp)? 如何在节点js上使用npm sqlite库的Prepared statements - How to use Prepared statements with npm sqlite library on node js 如何通过 js 中 object 数组中的 object 键进行过滤 - How can I filter by object key from array of object in js 如何在Node.JS for MSSQL中创建准备好的语句? - How do I create a prepared statement in Node.JS for MSSQL? 如何在if语句中使用数组变量? - How can I use array variable in an if statement? ember js,如何从路由中使用控制器中的数组 - ember js, how can i use the array in the controllers from the routes 卡在 Javascript 上? - 如何使用 If 语句更新元素和数组? - Stuck with Javascript! - How do I use an If statement to update an element and an array? 当if语句被触发时,如何更新对象键/值? - How can I update object keys/values when if statement is triggered?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM