NodeJS MySQL prepared statement return value?
Hallo zusammen,
ich hab folgendes Problem: Ich schreibe grade ein NodeJS-Backend mit einer Verbindung zu einer Datenbank. Dazu nutze ich das Node-Modul "mysql". Es funktioniert auch soweit prima. Wenn ich einen query ohne prepare stelle, erhalte ich auch ein Ergebnis der Datenbank. Wenn ich nun mit Prepare einen Query stelle, erhalte ich hingegen nur ein leeres Array zurück. Der Nutzername, der verwendet wird, existiert auf jeden Fall.
Weiß jemand in diesem Falle einen Rat?
LG,
Ich arbeite mit einer async function und await.
return new Promise((res) => {
this.conn.query(sql, data, (err, result) => {
console.log(result, err);
if (err) res(false)
return res(result)
})
})
Der Fehler liegt vermutlich in sql und in data. Welche konkreten Werte haben sie?
Hi, sql war bei mir
SELECT * FROM table WHERE name = ?
data war bei mir
['Test']
Ich habe grade nochml nachgeguckt, ein Nutzer mit dem Namen "Test" existiert auf jeden Fall.
LG
1 Antwort
Ich habe mir gerade ein Beispiel kurz zusammengebaut, um zu prüfen, ob dein Problem reproduzierbar ist.
const mysql = require("mysql");
const connection = mysql.createConnection({ /* ... */ });
connection.connect();
async function getData(sql, data) {
return new Promise((res) => {
connection.query(sql, data, (err, result) => {
console.log(result, err);
connection.end();
if (err) res(false);
return res(result);
})
})
}
const result = await getData("SELECT * FROM users WHERE name = ?", ["John Doe"]);
console.log(result);
Das Ergebnis ist allerdings wie zu erwarten, ein Dataset mit entsprechendem Fund. Meine Tabelle hat einen Eintrag mit dem Namen John Doe.
[ RowDataPacket { name: 'John Doe' } ]
Ich würde dir empfehlen, nochmals die Tabellenstruktur in deiner Datenbank zu prüfen. Möglicherweise verbindest du dich mit der falschen Datenbank (die allerdings über dieselbe Tabelle verfügt).
Sofern das passt, geh noch einmal ein paar Schritte zurück und teste anhand des Einleitungbeispiels (aber mit Platzhaltern).
Vielen Dank, bei mir ging es nun auch
Das problem lag an derer Stelle, ich konnte es nun aber finden