2009-10-18 8 views
1

Je développe une extension pour firefox et j'ai créé une base de données SQLite. Lors de l'insertion de valeurs dans la table, un message d'erreur s'affiche: Erreur: Autorisation refusée pour http://en.wikipedia.org d'appeler la méthode UnnamedClass.toString sur <>. Les valeurs de chaîne à insérer sont stockées dans une variable.Insérer dans SQLite avec des variables en utilisant javascript

var book = "Harry Potter"; 
var myInsertQuery = 'INSERT INTO mybooks_tbl(title) VALUES('+ book + ');'; 

Comment insérer des données que nous dans le tableau en tant que variables et non comme des chaînes?

acclamations

+1

Ce message d'erreur est très peu susceptible d'avoir quelque chose à voir avec votre problème .. Attention à poster plus de code? – Nickolay

Répondre

2

SQLite suit la norme ANSI pour string literals:

A string constant is formed by enclosing the string in single quotes ('). A single quote within the string can be encoded by putting two single quotes in a row

donc:

function sqlstr(s) { 
    return "'"+s.replace(/'/g, "''")+"'"; 
} 

var query= 'INSERT INTO books(title) VALUES('+sqlstr(book)+');'; 

Vous devez vous rappeler d'échapper à toutes les chaînes littérales comme ça, ou vous aurez fait un trou d'injection SQL côté client.

+3

Vraiment, vous ne devriez pas faire l'échappement vous-même, cependant. Vous devriez utiliser les fonctions de liaison qui sont disponibles et laisser le moteur gérer pour vous: https://developer.mozilla.org/En/Storage#Binding_Parameters – sdwilsh

+0

Merci et j'ai trouvé un moyen de contourner en liant le paramètre. – fftoolbar

1

Une erreur est survenue dans la chaîne uniquement var query = 'INSERT INTO livres (title) VALUES (' + sqlstr (book) + ');';

tx.executeSql ('INSERT INTO CLASS_LIST ("class_title", "") VALEURS ("+ v.classTitle +")');

Questions connexes