tableau javascript comme une liste de chaînes de caractères (en conservant les guillemets)
J'ai un tableau de chaînes de caractères. Lorsque j'utilise .toString() pour la sortie il les guillemets ne sont pas conservées. Cela rend difficile de construire la requête mysql à l'aide d'un "in". Considérez les points suivants:
SELECT * FROM Table WHERE column IN ('item1','item2','item3','item4')
toString is returning: IN (item1,item2,item3,item4)
Il doit y avoir une solution simple je suis surplombant ici.
- Vous êtes à la préparation d'une requête MySQL en JavaScript? ... mmm ... d'injection SQL
- êtes-vous à l'aide de javascript côté serveur?
- Oui, sauf si cette juste un prototype rapide, vous devez être conscient que la formation SQL sur le client est essentiellement de permettre à toute personne un accès complet à votre base de données. N'a pas d'importance si c'est plus de HTTPs, l'utilisateur peut simplement ouvrir le débogueur et de les injecter à l'écart.
- Désolé de gâcher votre plaisir sur l'injection sql. J'ai un interne de recherche de texte intégral de la pile qui est de retour pour moi indices de disques que j'ai besoin de recherche dans mysql. Node_Mysql a un bug qui empêche de tableaux à partir bien passé donc je cherchais un travail autour de. J'ai fini par trouver un patch qui a juste pas encore trouvé son chemin à la base: github.com/felixge/node-mysql/issues/126
Vous devez vous connecter pour publier un commentaire.
Les guillemets ne sont pas conservés parce qu'ils ne sont pas réellement partie de la chaîne de valeur, ils sont juste nécessaire d'indiquer les littéraux de chaîne dans votre code.
Donc, ne pas utiliser de
toString()
. Au lieu de cela, une façon de le faire est comme suit:La Tableau.join() méthode renvoie une chaîne qui est l'ensemble des éléments du tableau concaténées dans une chaîne unique avec un (option) séparateur entre chaque élément. Donc, si vous spécifiez un séparateur qui comprend les guillemets et les virgules, vous avez juste à ajouter manuellement de début et de fin devis pour le premier et le dernier élément (respectivement).
(Et veuillez dites-moi, vous n'êtes pas à l'aide de JavaScript côté client pour la forme de votre SQL.)
EDIT: pour permettre un tableau vide, ajouter une valeur par défaut pour la suite de la chaîne, sinon (comme l'a souligné missingno), la chaîne serait
"''"
:(Peut-être plus approprié d'avoir une
if (arr.length===0)
à prendre une autre action plutôt que de l'exécution de l'instruction SELECT.)"''"
) ou une chaîne vide? (""
)La solution simple est d'ajouter les guillemets vous
Ne remarque que je suis entièrement d'ignorer l'injection SQL questions ici.
Utilisation
Array.map
à enrouler chaque élément avec des guillemets:Le code devient plus simple avec ES6 caractéristiques - flèche fonctions et les chaînes du modèle (mise en œuvre en node.js 4.0 et supérieur):
Vous pouvez également utiliser la liste blanche pour empêcher les injections SQL:
de sortie: "SELECT .... FROM ... where id IN ('cle1','cle2')"
Stocker les citations: