bind le variabili alle istruzioni SQL usando node-sqlite3

Sto cercando di convertire questo:

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) { ... 

A questo:

 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) { ... }) } 

ma continuo a ricevere questo errore: Errore: SQLITE_ERROR: vicino a “$ table”: errore di syntax

Ma non sono sicuro di cosa sia sintatticamente sbagliato qui poiché il formato è come l’ho visto nella documentazione dell’API. Ho provato ‘?’, ‘@’ E ‘:’ prima di ogni variabile ma nessuna sembra essere riconosciuta. Cosa c’è che non va nel mio codice?

I parametri di associazione funzionano solo per i valori nella clausola WHERE . I nomi di tabelle e colonne (chiamati collettivamente “identificatori”) non funzioneranno.

 "SELECT foo FROM bar WHERE this = $that" # OK "SELECT foo FROM bar WHERE $this = 'that'" # Not OK 

Normalmente ci si aggira evitando e citando identificatori e inserendoli nella query. Una buona libreria di database ha una chiamata al metodo per questo …

 var this = db.quote_literal(input_column); 'SELECT foo FROM bar WHERE ' + this + ' = ?' 

Sfortunatamente, node-sqlite3 non sembra averne uno. 🙁

SQLite fornisce una funzione di quotatura, l’operatore% w , ma node-sqlite3 non sembra renderlo disponibile.

Dovrai scrivere il tuo. Segui le istruzioni di questa risposta in Python e convertili in Javascript.

  • Assicurati che la stringa possa essere codificata come UTF-8.
  • Assicurarsi che la stringa non includa caratteri NUL.
  • Sostituisci tutto “con” “.
  • Avvolgi l’intero object tra virgolette.

Non sono molto bravo con Javascript, quindi ti lascio codificare.