我正在尋找支持存儲過程的nodejs的mySQL驅動程序。 http://nodejsdb.org/db-mysql/,我一直在使用給出了錯誤是否有支持存儲過程的nodejs上的mysql驅動程序?
過程不能返回在給定上下文
我正在尋找支持存儲過程的nodejs的mySQL驅動程序。 http://nodejsdb.org/db-mysql/,我一直在使用給出了錯誤是否有支持存儲過程的nodejs上的mysql驅動程序?
過程不能返回在給定上下文
存儲過程的結果集:
DELIMITER //
CREATE PROCEDURE test1p1()
BEGIN
SELECT 1+1;
END //
DELIMITER ;
的node.js腳本:
mysql = require('mysql-native');
var db = mysql.createTCPClient();
db.auth('test', 'tester', ''); // db, user, password
db.query('call test.test1p1;').on('row', function(r) {
console.log(r);
}).on('end', function() {
console.log('OK!');
});
輸出:
{ '1+1': 2 }
OK!
菲利克斯Geisendörfer的node-mysql支持存儲過程,但你需要通過SELECT
結束存儲過程荷蘭國際集團成功/失敗的標誌,然後查詢它你將一個SELECT
查詢。這裏的存儲過程可能如下:
DELIMITER //
DROP PROCEDURE IF EXISTS MyProcedure //
CREATE PROCEDURE MyProcedure(IN param1 VARCHAR/*, My, Parameters, ... */)
BEGIN
DECLARE EXIT HANDLER FOR NOT FOUND, SQLWARNING, SQLEXCEPTION SELECT 0 AS res;
# My Queries etc. ...
SELECT 1 AS res;
END //
DELIMITER ;
您的節點的代碼看起來是這樣的:用存儲過程和它的很簡單隻需要調用你的存儲與參數的過程
var mysql = require('mysql');
var client = mysql.createConnection({
host : '127.0.0.1',
user : 'username',
password: 'password'
});
client.query('USE mydatabase');
var myParams = "'param1', 'param2', ... ";
client.query("CALL MyProcedure(" + myParams + ")", function(err, results, fields) {
if (err || results[0].res === 0) {
throw new Error("My Error ... ");
} else {
// My Callback Stuff ...
}
});
你必須開玩笑這個字符串連接的參數值。你想SQL注入?這是我們如何獲得SQL注入。 – moron4hire
或許這個例子應該被更新以顯示如何正確地逃脫,例如https://www.npmjs.com/package/mysql#escaping-query-values – kurttheviking
您可以簡單地通過使用+ client.escape(myParams)+ – user3564573
node-mysql司機的工作。
CREATE PROCEDURE GetAllStudent(id int)
BEGIN
SELECT * FROM student where userid = id ;
END;
和節點只需要調用
app.get('/sp', function (req, res, next) {
connection.connect();
connection.query('CALL GetAllStudent(?)',[req.body.id],function (err, rows, fields) {
if (err) {
res.status(400).send(err);
}
res.status(200).send(rows);
});
connection.end();
});
這種方式無需擔心SQL注入。
here是良好的NodeJS教程和MySQL
把多種解決方案一起完整
存儲過程:
CREATE PROCEDURE GetStudent(id int)
BEGIN
SELECT * FROM student where userid = id ;
END;
的Node.js和快速代碼:
var express = require('express');
var mysql = require("mysql");
var
app = express();
var pool = mysql.createPool({
connectionLimit: 100,
host: 'localhost',
user: 'root',
password: '',
database: 'demo'
});
app.get('/pool', function (req, res) {
var studentId = req.body.id;
pool.getConnection(function (err, connection) {
// connected! (unless `err` is set)
if (err) {
res.status(400).send(err);
}
connection.query('CALL GetStudent(?)',[studentId], function (err, rows, fields) {
connection.release();
if (err) {
res.status(400).send(err);
}
res.status(200).send(rows);
});
});
});
app.listen(4000, function() {
console.log('Server is running.. on Port 4000');
});
(來源:Pushker Yadav和「http://www.javascriptpoint.com/nodejs-mysql-tutorial-example/「)
請顯示您的代碼。 – eggyal
這裏是一個示例http://pastebin.com/8sh1vXrP – abinop
你總是有更多的選擇,如果萬一你不能破解這個模塊,請檢查https://github.com/joyent/node/wiki/模塊#wiki-db-mysql – Futur