我想转换这个:
var query_string = 'SELECT protein_A, protein_B, PIPE_score, site1_A_start FROM ' + organism + PIPE_output_table +
' WHERE ' + score_type + ' > ' + cutoff['range'] + ' AND protein_A = "' + item + '" ' +
'UNION SELECT protein_A, protein_B, PIPE_score, site1_A_start FROM ' + organism + PIPE_output_table +
' WHERE ' + score_type + ' > ' + cutoff['range'] + ' AND protein_B = "' + item + '";';
db.each(query_string, function (err, row) {
...
对此:
var query_string = "SELECT protein_A, protein_B, PIPE_score, site1_A_start FROM $table WHERE $score_type > $score AND protein_A = '$protein'" +
" UNION SELECT protein_A, protein_B, PIPE_score, site1_A_start FROM $table WHERE $score_type > $score AND protein_A = '$protein'";
var placeholders = {
$table: organism + PIPE_output_table,
$score_type: score_type,
$score: cutoff['range'],
$protein: item
};
var stmt = db.prepare(query_string, placeholders, function(err) {
console.log(err);
stmt.each(function(err,row) {
...
})
}
但我一直收到这个错误: 错误:SQLITE_ERROR:near" $ table":语法错误
但我不确定这里的语法错误,因为格式就像我在API文档中看到的那样。我曾尝试过',' @'和':'在每个变量之前,但似乎都没有被识别。 我的代码有什么问题?
答案 0 :(得分:1)
绑定参数仅适用于WHERE
子句中的值。表和列名称(统称为“标识符”)将不起作用。
"SELECT foo FROM bar WHERE this = $that" # OK
"SELECT foo FROM bar WHERE $this = 'that'" # Not OK
通常,您可以通过转义和引用标识符并将其插入查询来解决此问题。一个好的数据库库有一个方法调用...
var this = db.quote_literal(input_column);
'SELECT foo FROM bar WHERE ' + this + ' = ?'
不幸的是,node-sqlite3似乎没有。 :(
SQLite确实提供了引用函数the %w operator,但是node-sqlite3似乎没有提供它。
你必须自己写。按照this answer in Python中的说明将其转换为Javascript。
我对Javascript不太满意,所以我会留下你的代码。