0
votes

Node JS MySQL Query dans la clause et le tableau des chaînes

J'essaie de transmettre des éventail de villes à la clause de la clause, mais semble inversé des virgules sont supprimés lors de la préparation de la requête

Voici le code P>

SELECT* FROM cities WHERE city IN (Moscow, Paris);


5 commentaires

Essayez avec une interpolation de chaîne.


Vous ne devriez pas concaténer un tableau avec une chaîne en utilisant + . Essayez avec rejoindre sur le tableau au lieu de construire votre chaîne d'abord


Pouvez-vous dire quel paquet utilisez-vous pour vous connecter à MySQL?


Utilisez Orm ou Requête Builder pour interroger.


Dupliqué possible de élément de tableau JavaScript à la chaîne


3 Réponses :


2
votes

Essayez ceci, il fonctionnera xxx

résultat: - xxx


0 commentaires

2
votes

L'utilisation d'un constructeur de requête est une méthode préférable mais une solution possible si vous avez un tableau long:

let stringifiedValues = JSON.stringify(city).replace(/\[|\]/g,'');
let sql = `SELECT * FROM cities WHERE city IN (${stringifiedValues})`;


1 commentaires

C'est une solution intéressante pour cette tâche! Si vous n'aimez pas Regexp, vous pouvez utiliser json.stringify (ville) .Slice (1, -1)



1
votes
  1. Utilisez le Carte fonction pour transformer tous les éléments de votre tableau. Vous souhaitez ajouter citations em> aux éléments tels que ceci moscow code> => 'moscou' code> li> li>
  2. Utilisez le Rejoindre Pour rassembler les éléments transformés en une chaîne em>. Le délimiteur peut être spécifié comme un argument comme celui-ci array.join (',') code> li>
  3. Utilisez littéraux de modèle (interpolation de chaîne) Pour injecter votre chaîne dans votre question em>. Comme ce $ {str} code> li>

    p>

    const city = ["Moscow", "Paris"];
    const injectedString = city.map(c => `'${c}'`).join(', ');
    
    let sql = `SELECT * FROM cities WHERE city IN (${injectedString})`;
    console.log(sql);

0 commentaires