web-dev-qa-db-fra.com

INSERT INTO échoue avec node-mysql

J'essaie d'insérer des données avec node.js. J'ai écrit le code suivant et installé le support MySQL via npm, mais je n’ai pas réussi à INSERT INTO la table.

Voici mon code:

var mysql = require('mysql');

function BD() {
    var connection = mysql.createConnection({
        user: 'root',
        password: '',
        Host: 'localhost',
        port: 3306,
        database: 'nodejs'
    });
    return connection;
}

app.post("/user/create", function(req, res) {
    var objBD = BD();

    var post = {
        username: req.body.username,
        password: req.body.password
    };

    objBD.query('INSERT INTO users VALUES ?', post, function(error) {
        if (error) {
            console.log(error.message);
        } else {
            console.log('success');    
        }
    });
});

Code HTML:

<form action="/user/create" method="POST" class="form-horizontal">
     <input type="text" id="username_input" name="username">
     <input type="text" id="password_input" name="password">
     <input type="submit" name="Submit" value="Insert" class="btn">
</form>

Le message d'erreur est:

Vous avez une erreur dans votre syntaxe SQL; Consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe appropriée à utiliser près de. 

Quelle est mon erreur?

17
rokirakan78

Faites attention à la documentation de node-mysql :

Si vous y avez prêté attention, vous avez peut-être remarqué que cette évasion vous permet de faire des choses intéressantes comme celle-ci:

var post  = {id: 1, title: 'Hello MySQL'};
var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
  // Neat!
});
console.log(query.sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'

Notez qu'ils utilisent SET au lieu de VALUES. INSERT INTO ... SET x = y est une requête MySQL valide, alors que INSERT INTO ... VALUES x = y ne l’est pas.

52
TimWolla

Je sais que ceci est un ancien post, mais je pensais que INSERT INTO ... VALUES est une commande valide (pas de SET) et très utile pour les mises à jour en masse:

db.query('INSERT INTO myTable (field1, field2, field3) VALUES ?', [values])

où [valeurs] est un tableau de tableaux, chaque tableau contenant ces trois champs et inséré en tant qu'enregistrement dans la table.

12
joeruzz

Pour ceux qui cherchaient, j’avais le même problème, mais il s’est avéré que c’était un problème plus complexe et sans rapport. Je ne déclarais pas 'use strict'; tout en haut du document. 

Je sais que cela en soi ne résoudra pas le problème d'insertion de base de données, mais il soulignait des parties de tout mon script mal codées et, une fois corrigées, tout fonctionnait comme prévu.

0
Branndon