webentwicklung-frage-antwort-db.com.de

INSERT INTO schlägt mit node-mysql fehl

Ich versuche, Daten mit node.js einzufügen. Ich habe den folgenden Code geschrieben und die MySQL-Unterstützung über npm installiert, aber ich konnte die Tabelle nicht INSERT INTO anzeigen.

Hier ist mein 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');    
        }
    });
});

HTML Quelltext:

<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>

Die Fehlermeldung lautet:

Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, auf die richtige Syntax, die in der Nähe verwendet werden soll.'username '=' Test ',' password '=' test 'in Zeile 1 

Was ist mein Fehler?

17
rokirakan78

Beachten Sie die Dokumentation von node-mysql :

Wenn Sie aufgepasst haben, haben Sie vielleicht bemerkt, dass Sie mit dieser Flucht ordentlich folgende Dinge tun können:

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'

Beachten Sie, dass sie SET anstelle von VALUES verwenden. INSERT INTO ... SET x = y ist eine gültige MySQL-Abfrage, INSERT INTO ... VALUES x = y nicht.

52
TimWolla

Ich weiß, dass dies ein alter Beitrag ist, aber ich dachte, ich würde teilen, dass INSERT INTO ... VALUES ein gültiger Befehl ist (kein SET) und sehr nützlich für Massenaktualisierungen:

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

dabei ist [Werte] ein Array von Arrays, wobei jedes Array diese drei Felder enthält und als Datensatz in die Tabelle eingefügt wird.

12
joeruzz

Bei anderen Suchern hatte ich dasselbe Problem, aber es stellte sich heraus, dass es ein komplizierteres, nicht zusammenhängendes Problem war. Ich habe nicht 'use strict'; ganz oben im Dokument angegeben. 

Ich weiß, dass dies das Datenbank-Einfügeproblem an sich nicht lösen wird, aber es zeigte Teile meines gesamten Skripts an, die falsch codiert waren. Sobald sie behoben wurden, funktionierte es wie erwartet.

0
Branndon