Articles of sqlite

Sqlite如何转义值以防止SQL注入

有谁可以告诉我如何转义input值,以防止SQL注入? 我有一个用户身份validation应用程序,我需要以某种方式导入一些安全性。 我的validation看起来像这样: //Validation req.checkBody('name', 'Name is required').notEmpty(); req.checkBody('email', 'Email is required').notEmpty(); req.checkBody('email', 'Email is not valid').isEmail(); req.checkBody('password', 'Password is required').notEmpty(); req.checkBody('password', 'Password must have at least 6 characters').len(6,20); req.checkBody('password2', 'Passwords do not match').equals(req.body.password); 然后我INSERT一些值如下: var stmt = db.prepare("INSERT INTO users ( id, name, email, password, salt) VALUES (NULL, ?, ?, ?, ?)"); stmt.run([ name, […]

错误:没有这样的函数:json_each在安装了JSON1的SQLite中

我通过brew安装了带有JSON1的SQLite3: brew install sqlite3 –with-json1 –with-fts5 版: 3.15.2 2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8 在运行查询时,一些函数可以正常工作,比如json_extract : sqlite> SELECT json_extract(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]'; ["foo","bar","baz"] 但是,当我尝试使用json_each或json_tree ,它失败: sqlite> SELECT json_each(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]'; Error: no such function: json_each Event表中的Body字段是一个有效的JSONstring: {"issue":{"fields":{"labels": ["foo","bar","baz"]}}} 而labels值是一个数组。 我已经阅读了文档(并查看了json_each示例 ),search了interwebs,但找不到任何其他要求来启用它。 我做错了什么,或者:我如何从json_each / json_tree中获得好处?

什么时候用node-sqlite3closures数据库并表示?

我的问题是找出何时closures从expressjs后端数据库连接到sqlite数据库。 我基本上想要实现的是一个数据库连接,在整个服务器正常运行期间打开,并在服务器closures时closures。 var express = require('express') var app = express() var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(data/Test.db); //use db as needed var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("Example app listening at http://%s:%s", host, port) }); //on shutdown db.close(); 我看了一下这些威胁: 堆栈溢出:process.on('exit',callback) Github的问题:应用程序没有app.close() 但build议的解决scheme不会为我工作,如果我用ctrl+c杀死我的快递服务器。 那么,如何处理服务器closures时打开的数据库连接将是一个“最佳实践”?

在Node.js中从SQLite获取表的列表

下面的代码只返回第一个表的名字,如何获得现有sqlite中所有可用表名的列表? const sqlite3 = require('sqlite3').verbose(); const db = new sqlite3.Database('path/to/mydb.sqlite'); db.serialize(function () { db.get("select name from sqlite_master where type='table'", function (err, table) { console.log(table); }); }); 产量 {name: "meta"} 在sqlite3命令行中打开时 sqlite> .tables downloads meta urls downloads_url_chains segment_usage visit_source keyword_search_terms segments visits

如何在phantomjs中实现快速,可查询和持久的数据库?

我一直在使用phantomjs在服务器端环境中为我做一些繁重的工作。 直到现在,我一直在内存中的数据结构(即没有做任何特别的事情),一切都很好。 但最近在一些使用情况下,我开始遇到以下问题: 内存使用率变得太高,使交换踢,严重影响我的performance。 由于内存中的数据结构不是永久的,所以不能从最后的保存点恢复(显然) 这迫使我寻找一个数据库解决scheme在幻像上使用,但我又遇到问题,而决定一个解决scheme: 我不想让自己的performance受到影响。 它必须是持久的和可查询的 我甚至如何连接到从幻影脚本里面的数据库。 谁能指导我一个令人满意的解决scheme? 注意:我几乎决定使用sqlite但是从幻影连接到它仍然是一个问题。 Nodejs提供了sqlite3节点模块,我正在尝试为幻影进行浏览。 Note注意: Browserify没有工作! 回到地面零! 🙁 感谢提前!

Node.js和sqlite:在callback中同步

我试图编码以下逻辑: if account in the DB, then update fields else insert new row with data. 这是一个primefaces操作,所以我把它当做SQL事务(DB是sqlite3): BEGIN; SELECT rowid FROM Account WHERE email=?; — Depending on SELECT's result, run INSERT or UPDATE: INSERT INTO Accounts(email, name, phone) VALUES (?, ?, ?); UPDATE Accounts SET name=? phone=? WHERE rowid=?; COMMIT; 我决定在select的callback中运行insert或update 。 但是到目前为止,SQL语句不再同步! 在同步块结束和callback执行之间,可以执行任意的SQL语句。 db.synchronized(function() { […]

Node.js,SQLite3和Express – POST上潜在的内存泄漏

我对node.js比较陌生,而且我的任务是编写一个简单的消息队列应用程序 – 基本上,应用程序将收到一个post,其中包含一些消息数据和客户端的mac地址,然后将其解码并插入到sqlite数据库,稍后由一个单独的进程发布。 一切工作正常,但我们正在经历什么可能是内存泄漏。 使用memwatch模块,我已经把漏洞缩小到我们的代码处理传入的post,我已经包括在下面: app.route('*') .post(function(req, res){ var mac = decodeURI(unescape(req.param('mac').replace(/\+/g, "%20"))); var data = decodeURI(unescape(req.param('data').replace(/\+/g, "%20"))); req = null; db.run("INSERT INTO queue (mac, data) VALUES (?,?)", [mac, data], function(er){ if(er) { res.writeHead(500, "Insert to queue failed", {'Content-Type': 'text/html'}); res.end(); } else { res.writeHead(200, "OK", {'Content-Type': 'text/html'}); res.end(); } res = null; mac = […]

使用NodeJS阻止在Sqlite中select查询结果的caching

我目前正在使用从Sqlite数据库中检索数据的快递在NodeJS中编写一个API。 包含要检索的数据(称为DATA)的表格有三列: ID – 整数 价值 – 真实 DATERECORDED – 整数 过去五个月的数据将被返回,为此,我使用以下查询: SELECT ID, VALUE FROM DATA WHERE DATERECORDED BEWTEEN date('now') AND date('now', '-5 months') 我最近从数据库中删除了几条logging,并input了新的logging。 但是,当我向我的API发出GET请求时,我仍然收回在数据库中包含旧logging时返回的数据。 我甚至删除了数据库中的所有logging,但是旧的结果仍然被返回。 无论如何,我可以防止这种caching? 我也尝试将cache_size设置为0.该查询正在使用以下代码中: app.get('/get-data', function(req, res) { console.log('Sending performance'); var stmnt = // query comes here if(!exists) { res.send({}); } else { var db = new sqlite3.Database(db_path); db.all(stmnt, […]

NodeJS sqlite3并发访问

基本上我有一个数据库没有多less出现,但可悲的是两个分组。 首先,对数据库有一个写访问权限。其次,有一个读访问权限。 读访问失败,并显示数据库被locking的消息( { [Error: SQLITE_BUSY: database is locked] errno: 5, code: 'SQLITE_BUSY' } ),这是完全正常的。 但是,我怎样才能让我的读取访问等待数据库closures? 我目前的代码: var sql = "INSERT INTO chickenmilk (userID,channelID,message) VALUES (?,?,?)" db.run(sql, userID, channelID, bot.fixMessage(message), function(err) { console.log(err); db.close(); }); 并发: var sql = "SELECT userID, COUNT(message) as count FROM chickenmilk WHERE channelID LIKE ? GROUP BY userID"; db.all(sql, data, […]

如何禁用node-sqlite3中的堆栈跟踪?

我已经从npm安装了sqlite3,使用这个包的时候我看到了这个堆栈跟踪(但是更长)。 如何禁用它? 节点版本是6.0。 ==== JS堆栈跟踪========================================= 安全上下文:0x1e993ebc9fa9#0# 1:.node [module.js:568] [pc = 0x1e3962aa3c84](this = 0x14ceca9bad31#1#,module = 0x2f85be11f541#2#,filename = 0x2f85be11f509) 2:load [module.js:456] [pc = 0x1e3962a38e72](this = 0x2f85be11f541#2#,filename = 0x2f85be11f509) 3:tryModuleLoad(aka tryModuleLoad)[module.js:415] [pc = 0x1e3962a3899d](this = 0x1e993eb04189,module = 0x2f85be11f541#2#,filename = 0x2f85be11f509) 4:_load [module.js:407] [pc = 0x1e3962a345e2](this = 0x14ceca9badb1#3#,request = 0x2f85be1186c1,parent = 0x14ceca9bd321#4#,isMain = 0x1e993eb04299) 5:require [module.js:466] [pc = 0x1e3962a42573](this […]