2012-05-11 31 views
8

Tôi đang tìm trình điều khiển mySQL cho các nút hỗ trợ các thủ tục lưu sẵn. http://nodejsdb.org/db-mysql/ mà tôi đã được sử dụng cho các lỗiCó trình điều khiển cho mysql trên nodejs hỗ trợ các thủ tục lưu sẵn không?

THỦ TỤC không thể trả về một kết quả thiết lập trong bối cảnh nhất định

+0

Vui lòng hiển thị mã của bạn. – eggyal

+0

đây là mẫu http://pastebin.com/8sh1vXrP – abinop

+1

Bạn luôn có thêm vài tùy chọn, nếu trong trường hợp bạn không thể crack mô-đun này, hãy kiểm tra https://github.com/joyent/node/wiki/ modules # wiki-db-mysql – Futur

Trả lời

4

nó hoạt động trong nodejs-mysql-native

thủ tục lưu trữ:

DELIMITER // 
CREATE PROCEDURE test1p1() 
    BEGIN 
    SELECT 1+1; 
    END // 
DELIMITER ; 

Node.js tập lệnh:

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!'); 
}); 

đầu ra: node-mysql hỗ trợ

{ '1+1': 2 } 
OK! 
11

Felix Geisendörfer của thủ tục lưu trữ, nhưng bạn cần phải kết thúc thủ tục lưu trữ của bạn bằng cách SELECT ing một lá cờ thành công/thất bại, sau đó truy vấn nó như bạn làm một truy vấn SELECT. Đây là cách các thủ tục lưu trữ có thể trông:

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 ; 

đang Node của bạn sẽ giống như thế này:

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

    } 
}); 
+1

Bạn phải bắt đầu bằng cách ghép chuỗi này với các giá trị tham số. Bạn có muốn SQL Injection? Đây là cách chúng tôi có được SQL Injection. – moron4hire

+1

có lẽ ví dụ phải được cập nhật để hiển thị cách thoát đúng cách, ví dụ: https://www.npmjs.com/package/mysql#escaping-query-values ​​ – kurttheviking

+1

Bạn có thể chỉ cần thoát bằng cách sử dụng + client.escape (myParams) + – user3564573

3

node-mysql tài xế làm việc với thủ tục lưu trữ và rất đơn giản chỉ cần gọi thủ tục lưu trữ của bạn với tham số.

CREATE PROCEDURE GetAllStudent(id int) 
BEGIN 
SELECT * FROM student where userid = id ; 
END; 

và trong nút chỉ cần gọi

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(); 
}); 

cách này không cần phải lo lắng về sql injection.

here là tốt hướng dẫn về nodejs và mysql

0

Đưa nhiều giải pháp cùng nhau cho đầy đủ

Stored Procedure:

CREATE PROCEDURE GetStudent(id int) 
BEGIN 
SELECT * FROM student where userid = id ; 
END; 

Node.js và mã Express:

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

(Nguồn tín dụng: Pushker Yadav và "http://www.javascriptpoint.com/nodejs-mysql-tutorial-example/ ")

Các vấn đề liên quan