【问题标题】:Function to save values in SQL database在 SQL 数据库中保存值的函数
【发布时间】:2021-08-23 16:55:45
【问题描述】:

我想更好地理解下面的 JavaScript 函数。如果你能帮助我,那就太好了。

function createevent(id, number, callback) {
    let sql = `INSERT INTO event (id, number, status) VALUES (?,?, 'outstanding')`
    let params = [id, number]

    db.run(sql, params, (err) => {
        if (err) {
            console.error(err.message)
            callback(true)
        } else callback(false)
    })
}
  • “let params”究竟是为了什么?
  • “db.run”发生了什么?

【问题讨论】:

  • 让参数创建一个带有 id 和 number 的数组,以便您可以传递给您的数据库。

标签: javascript sql sqlite


【解决方案1】:

在这种情况下,最好使用const 而不是let, 让变量在当前范围内可以重新分配

db.run 准备 sql,发送到 db,等待响应将响应传递给您的回调

准备sql, sql有-?,每个人都同意一个参数,首先?到第一个参数... 在准备 sql 期间,?替换为参数

你不会写

  const sql = `INSERT INTO event (id, number, status) VALUES (${id},${number}, 'outstanding')`;

因为不安全,你的 id 参数可以包含 sql(可以阅读 SQL 注入)

准备好 sql -> 将其发送到数据库并等待结果, 获取结果后将其传递给您的回调函数

(err) => {
        if (err) {
            console.error(err.message)
            callback(true)
        } else callback(false)
    }

在这种情况下,您将验证 sql 是否在数据库中成功执行

您可以在任何有关在 nodejs 中使用某些 SQL 的文档中阅读更多相关信息 因为它https://www.sqlitetutorial.net/sqlite-nodejs/insert/

【讨论】:

    【解决方案2】:

    db.run(sql, params, (err) => {});

    这个内置函数采用三个特定的参数,其中 第一个是带有问号的 sql 查询作为动态值的标识符,该动态值将作为第二个参数中的数组传递。 第二个是具有类似于 order 和 size 值的数组,其中问号出现在 sql 查询中 第三个只是回调函数,称为查询的执行后。

    执行时,查询中出现的所有问号都将被第二个参数中的值替换。

    因此,如果您将 [id,number] 作为第二个参数传递。然后第一个问号取id的值,第二个变成数字。

    【讨论】:

      【解决方案3】:
      1. let 是现代 javascript 中用于声明变量的关键字,之前使用了 var 关键字。

      2. db.run() 将用于运行 sql 命令,以便将新记录添加到数据库中。它需要3个参数

        1. sql 命令:这里是INSERT INTO
        2. 参数:进入占位符“?”的实际值sql命令中的符号,从而完成sql命令为INSERT INTO event (id, number, status) VALUES (id, number, 'outstanding')。 id 和 number 的值是参数值。
        3. 回调函数:在命令执行后由db.run()返回的函数。我们可以通过检查回调函数返回的值来检测是否有错误发生。
      // Variable declarations
      let sql = `INSERT INTO event (id, number, status) VALUES (?,?, 'outstanding')` // save sql command to variable named sql
      let params = [id, number] // save id and number as array to variable named params 
      
      // Run SQL command
      db.run(sql, params, (err) => {        // passing saved values and function to get error status
          if (err) {                        // check if error happened
              console.error(err.message)    // if yes print error message to console
              callback(true)                // and return true to callback function
          } else callback(false)            // else return false to callback function
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        相关资源
        最近更新 更多