gpt4 book ai didi

javascript - 使用 node-sqlite3 将变量绑定(bind)到 SQL 语句

转载 作者:行者123 更新时间:2023-11-30 00:17:16 36 4
gpt4 key购买 nike

我正在尝试转换它:

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:“$table”附近:语法错误

但我不确定这里的语法错误是什么,因为格式与我在 API 文档中看到的一样。我在每个变量前尝试过“?”、“@”和“:”,但似乎没有一个被识别。我的代码有什么问题?

最佳答案

绑定(bind)参数仅适用于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。

  • 确保字符串可以编码为 UTF-8。
  • 确保字符串不包含任何 NUL 字符。
  • 将所有的“替换为”。
  • 将整个内容用双引号引起来。

我不太擅长 Javascript,所以我会留给你编码。

关于javascript - 使用 node-sqlite3 将变量绑定(bind)到 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34303706/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com