2017-07-16 14 views
0
connection.query('select * from `test` WHERE `deny`=false',function(err,rows,fields){ 

for (var i=0; i<rows.length; i++){ 
    if (rows[i].enddate == mydate) 
    { 
      msg = "message"; 
      connection.query('select * from `cash` WHERE `id`=test',function(err2,rows2,fields2){ 
      if (rows2[0].cash >= 30) 
      { 
       connection.query('UPDATE `cash` SET `cash`='+ rows2[0].cash-30 +' WHERE `id`=test',function(err3,rows3,fields3){ 
       msgsend(rows[i].contact,msg); 
       }); 
      } 
      }); 
    } 


} 
}); 

これは私のコードです。 私は私のコード を実行したときしかし、それはこのようなエラーを示しています。 例外TypeErrorは:プロパティを読み取ることができません「0」未定義Node.js - 母クエリからネストされたクエリにデータを取得する

の私のコードが間違っている何 を助けてください?

+0

を試してみました実用的な例* –

+0

どこにデバッグ行を置くのですか? – Jongho

答えて

0

は、そのうちの一つが空であるかもしれ

console.log(rows)console.log(rows2)を使用して、まずそれをデバッグしてみます。

はまた、エラーパラメータを使用すると、エラーパラメータをキャッチし、それらを確認することができ、その理由のために、次のとおりです。

if(err) console.log(err) else //rest of program

同様ERR2

if(err2) console.log(err2) else //rest of program

これはdefinetly問題を解決するのに役立つだろう

EDIT

デバッグ行はどこに配置しますか?

は明らかにあなたが

function(err,rows,fields){ console.log(rows); //undefined if empty if(err) console.log(err); else //rest code }

+0

console.logコマンドを2番目のクエリの外に置くと、console.logで結果を見ることができます。しかし、私はquery1の結果をquery2のループの中に見ることはできません。 2番目と3番目のクエリでも同じです。 – Jongho

+0

私のコードは(ERR、行、フィールド){//成功 機能行の デバッグ(ERR2、rows2、fields2){// rows2成功 機能の デバッグに失敗し、//行の デバッグ( 機能のようなものですERR3、rows3、fields3){rows2の デバッグ// rows3 //成功 //内部コード のデバッグに失敗}} } – Jongho

+0

TEMPでクエリ1変数 'VARのTEMP = rows'以上の結果を格納してみてください2番目のクエリの内部で使用する – wrangler

0

同様

をデバッグする必要がどこに、あなたが簡単な、ループの内側*閉鎖を見ても、最初はAsync

connection.query('select * from `test` WHERE `deny`=false',function(err,rows,fields) { 

    for (var i=0; i<rows.length; i++){ 
     if (rows[i].enddate == mydate) { 
      myFuntion(row[i], function(msg) { 
       console.log(msg) // Success! 
      }) 
     } 
    } 
}) 

function myFuntion(row, callback) { 
    async.waterfall([ 
     function(callback) { 
      msg = "message"; 
      connection.query('select * from `cash` WHERE `id`=test',function(err2,rows2,fields2){ 
       callback(null, rows2); 
      }); 
     }, function(rows2, callback) { 
      if (rows2[0].cash >= 30) 
      { 
       connection.query('UPDATE `cash` SET `cash`='+ rows2[0].cash-30 +' WHERE `id`=test',function(err3,rows3,fields3){ 
        msgsend(row.contact,msg); 
        callback(null); 
       }); 
      } 
     } 
    ], function(err){ 
     if(err) 
      console.log("Error: ", err); 
     else 
      callback("Success!"); 
    }) 
} 
関連する問題