在Postgres的正确分隔单引号插入/更新

问题描述:

我有一个很难搞清楚如何来分隔文本字段的任何单引号在PostgreSQL的UPDATE语句。如果我考虑以下内容,将'替换为'',这似乎是需要的,但它仍然无法正常工作。另外,如果有人在字符串中发送''',你会怎么做?在Postgres的正确分隔单引号插入/更新

var userid = request.decoded.id; 
var incomingString = "Hello I'm a user."; 
var newBio = incomingString.replace("'", "''"); 

pg.connect(process.env.DATABASE_URL, function(err, client, done){ 
        client.query("UPDATE users SET bio = "+newBio+" WHERE user_id = "+userid+"", function(err, result){ 
           done(); 
           if(err){ 
           response.json({message:"err in db input."}); 
           } 
           else{ 
           response.json({message:"success"}); 
           } 
           }); 
        }); 

我应该简单地将上面的SQL语句更改为如下所示吗?这是否解决了SQL注入漏洞,需要转义单引号?

"UPDATE users SET bio = $1 WHERE user_id = $2", [newBio, userid]", 

您不应该手动转义SQL特殊字符。

你的第二个例子是正确的。使用准备/参数化语句消除了SQL注入威胁。