2017-08-19 6 views
0

私はMySQLでストアドルーチンを実行しようとしていますが、HeidiSQLでそれを実行すると正常に動作してメッセージが返されますが、NodeJSを使用して実行すると戻りメッセージは常に空です。OUTはコマンドラインでは常に空ですが、SQLクライアントにはありませんか?

var mysql = require('mysql'); 

var con = mysql.createConnection({ 
    host: '', 
    user: '', 
    password: '', 
    database: '', 
    multipleStatements: true 
}); 

con.connect(function(err) { 
    if(err) throw err; 
    console.log("Connection Established!"); 
}); 

var AddPointsDiscord = 
"CALL AddPointsDiscord(?,?,@RETURN_MESSAGE);"+ 
"SELECT @RETURN_MESSAGE;"; 

var user = ''; 
var ScoreAdded = 1; 
var ReturnMessage = ''; 

con.query(AddPointsDiscord, [user, ScoreAdded, ReturnMessage], function(err, result) { 
    if(err) throw err; 
    console.log(ReturnMessage); 
}); 

パラメータは以下のとおりです。

  • USER - ユーザー(IN)に追加する新しいスコア
  • RETURN_MESSAGE - - varchar型の確執ID(IN)
  • ADD_SCOREのために返されるメッセージ(OUT)

どこが間違っていましたか?

答えて

0

ここでは非同期動作に移行する可能性があります。クエリ結果がデータベースによって返される前に関数が終了しています。

、非同期動作をキャッチコールバック機能を使用するには:

con.query(AddPointsDiscord, [user, ScoreAdded, ReturnMessage], function(err, result) { 
    if (err) 
     callback(err,null); 
    else 
     callback(null,ReturnMessage); 
}); 
+0

は、機能をcallback' 'ですか?それはnodejsによって知られていません。 – OmniOwl

+0

いいえ、あなたはそれを実装する必要があります:https://stackoverflow.com/questions/24232350/node-mysql-async-multiple-queriesは深いものです。それがうまくいけば、あなたの投稿にできるだけ重複して表示し、この回答を削除します。 –

+0

私はこの例に従おうとしましたが、それでも動作しません:/。これは私が持っているものです。var callback = function(obj、msg){ if(obj!== null){ throw obj; } else { console.log(msg); (エラー、null) } };これは私のクエリにしたものです: 'con.query ; else コールバック(null、ReturnMessage); }); ' – OmniOwl

関連する問題