2013-04-21 34 views
5

Tüm yapmak istediğim, veritabanımın sahip olmaması durumunda bazı veriler eklemek, bu yüzden SQL'i Select SQL'in geri arama işlevine Insert SQL yerleştiriyorum, ancak hatam var böyle:Node.js ve mysql Geri arama: sorgudaki sorgu geri bildirimi

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

benim kod parçacığı burada:

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

birisi bana bazı tavsiyeler verebilir misiniz? ----

aslında seçeneğini SQL geri çağırma işlevi anonim işlev değil, db.end() hakkında benim kod parçacığı böyle

---- güncelleme Teşekkür

:

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(); 
+0

DB bağlantınızı bu koddan sonra bir yerde mi kapatıyorsunuz? – loganfsmyth

+0

evet, db.query'yi bitirdiğimde ('select ...') db.end(); – Arvin

+0

Bu, INSERT sorgunuzun çalıştırıldığı sırada bağlantının kapanacağı anlamına gelir. Lütfen bu kodu sorunuza ekleyin ve bir cevap vereceğim. – loganfsmyth

cevap

14

sen db.end()SELECT kez kapatmak için bağlantıyı sıraya çağrı tamamladı, sen iç INSERT sorgusu yapmak istediğinizde bu yüzden, veritabanı bağlantısı kapatılmış olacak, dolayısıyla hata PROTOCOL_ENQUEUE_AFTER_QUIT, yeni bir kuyruk çalışıyorsunuz olarak Bağlantı kapatıldıktan sonra komut.

Bağlantıyı nasıl oluşturduğunuza bağlı olarak, ya db.end() numaralı aramayı geri aramaların içine almalı ya da program başlatıldığında bağlantı açılırsa, db.end() numaralı çağrıyı kullanmalısınız.

+0

Ctrl-C ile komut dizilimimi sonlandırmak zorunda kaldığım tüm sonuçlarda '' node' komutuyla komut satırından başlıyorum '' sonucunu yerine getirmedim. Ancak bu, 'PROTOCOL_ENQUEUE_AFTER_QUIT' – Lori

+2

@Lori Doğru'dan kurtuldu, bu yüzden 'bağlantıyı nasıl oluşturduğunuza bağlı' ile başladım. Örneğin bir düğüm sunucusu yazıyorsanız, bağlantıyı yalnızca bir kez açacaksınız ve sunucunun her çıkışta çıkacağı beklentisi yok. Bir komut dosyası yazıyorsanız, komut dosyanızdaki tüm işlemler tamamlandıktan sonra bağlantıyı sonlandırmak istersiniz. – loganfsmyth