代码之家  ›  专栏  ›  技术社区  ›  Djov

节点。js Firebird SQL连接器-正在从插入获取结果。。。返回

  •  0
  • Djov  · 技术社区  · 8 年前

    这是我第一次使用firebird连接器。在过去,当使用mySql连接器时,我记得在插入新值时有某种回调。现在,我正在使用Henri Gourvest的node firebird库来实现这一点: https://github.com/hgourvest/node-firebird/

    任何建议都是非常好的。

    pool.get(function(error, db) {
        if (error) {
            console.log(error)
            res.status(403)
            res.send()
    
        }
        else {
            var date = moment(req.body.date, "DD/MM/YYYY")
            var values = " VALUES ('" + date.format("MM/DD/YYYY") + "','Requested','" + req.body.type + "','" + req.body.description + "','" + req.body.memo +"')"
            var query = 'INSERT INTO "Features" (FEATURE_REQUESTDATE, FEATURE_STATUS, FEATURE_TYPE, FEATURE_DESCRIPTION, FEATURE_MEMO)' + values
    
    
            db.query( query , function(err, result) {
                if (result) { //why is there no result here?
                    res.status(200)
                    res.send('ok')
                }
                if (err) {
                    console.log(err)
                    res.status(403)
                    res.send('error')
                }
            })
    
    
                db.detach();
            }
    })
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   Arioch 'The    8 年前

    我尝试在末尾添加“RETURNING FEATURE\u ID”,但抛出了一个错误“Cursor is not open”。

    查询 - 选择 -键入SQL语句。

    RETURNING 条款不属于 类型,它们属于 过程调用 类型你应该像执行常规命令一样执行它们 DELETE

    现在,我正在使用Henri Gourvest的node firebird库来实现这一点: https://github.com/hgourvest/node-firebird/

    1. 从未 一定要剪接你的 SQL中的值 文本它使您的程序非常脆弱。它会给您带来各种数据转换错误,还为意外的错误或恶意用户输入造成的数据库损坏打开了通道。看见 http://bobby-tables.com/ http://en.wikipedia.org/wiki/SQL_injection

    2. ,因此您可以阅读库的创建者打算如何使用它。这个特定的库有测试。测试总是预期用途的例子。

    所以你进入 test run.js

    现在按Ctrl+F并搜索“RETURNING”单词。不一定是第一次,但其中一次应该是对您需要的SQL功能进行精确测试。

    function test_insert(next) {
    
    ....skip.......
    
       // Insert record without blob 
             database.query('INSERT INTO test (ID, NAME, CREATED, PARENT) VALUES(?, ?, ?, ?) RETURNING ID', [3, 'Firebird 3', now, 862304020112911], function(err, r) { 
                 assert.ok(!err, name + ': insert without blob (buffer) (1) ' + err); 
                 assert.ok(r['id'] === 3, name + ': without blob (buffer) returning value'); 
                 next(); 
             }); 
    
         // Insert record without blob (without returning value) 
             database.query('INSERT INTO test (ID, NAME, CREATED) VALUES(?, ?, ?)', [4, 'Firebird 4', '2014-12-12 13:59'], function(err, r) { 
                 assert.ok(!err, name + ': insert without blob (buffer) (2) ' + err); 
                 assert.ok(err === undefined, name + ': insert without blob + without returning value'); 
                 next(); 
             });