2013-04-21 95 views
5

私のデータベースにはないデータが挿入されているので、Select SQLのコールバック関数にInsert SQLを挿入しますが、エラーが発生しました。このように:Node.jsとmysqlコールバック:クエリコールバックのクエリ

{ [Error: Cannot enqueue Query after invoking quit.] code: 'PROTOCOL_ENQUEUE_AFTER_QUIT', fatal: false }

私のコードスニペットはここにある:

db.query('SELECT count(*) as Resultcount FROM tablename WHERE email = ? and password = ?', [post.email, post.password], function(error, result){ 
    if (result[0].Resultcount == 0){ 
     var query2 = db.query('INSERT INTO tablename SET ?', [post], function(err, result) { 
      if(err){ 
       console.log(err); 
      } 
      console.log(result); 
      }); 
    } 
    else{ 
     console.log('have data already'); 
    } 
}); 

は、誰かが私にいくつかのアドバイスを与えることができますか? おかげ

----実際には、選択したSQLのコールバック関数は、匿名関数ではありませんアップデート----

、db.endについての私のコードスニペットは、()、このようなものです:

var QueryResults = new queryResultFuntion(Back_results); 

    db.query('SELECT count(*) as Resultcount FROM tablename WHERE email = ? and password = ?', [post.email, post.password], QueryResults.queryResult); 


    db.end(); 
あなたは db.end()コールあなたがインナー INSERTクエリを実行しようとすると、あなたが新しいをキューしようとしているように、データベース接続が、エラーPROTOCOL_ENQUEUE_AFTER_QUITしたがって、閉鎖されています、 SELECTが完了したら閉じるように、接続をキューに入れます
+0

このコードの後のどこかでDB接続を終了していますか? – loganfsmyth

+0

はい、db.query( 'select ...')を終えると、私はdb.end()を呼び出しました。 – Arvin

+0

これは、INSERTクエリが実行されるまでに接続が閉じられることを意味します。あなたの質問にそのコードを追加してください。私は答えを出します。 – loganfsmyth

答えて

14

コマンドは、接続が閉じられた後に実行されます。

接続をどのように作成するかによって、コールバック内でdb.end()コールを移動するか、プログラムの開始時に接続が開かれた場合はdb.end()コールが発生しないようにする必要があります。

+0

すべての結果で 'db.end()'を実行しないと、Ctrl + Cでスクリプトを終了する必要があります(コマンドラインで 'node'コマンドを使い始めます)。しかし、これは 'PROTOCOL_ENQUEUE_AFTER_QUIT'を取り除きました。 – Lori

+2

@Lori正しいので、私は'接続の作成方法に応じて 'を前に付けました。たとえば、ノードサーバーを作成している場合は、接続を1回だけ開くだけで、サーバーがすべて終了することはありません。スクリプトを作成している場合は、スクリプト内のすべての操作が完了したら接続を終了することをお勧めします。 – loganfsmyth

関連する問題