2014-06-01 3 views
0

Что я делаю:ВСТАВИТЬ не срабатывает сразу

  1. ВЫБРАТЬ из базы данных,
  2. , если строка не существует
  3. ВСТАВИТЬ ряд
  4. повторите шаг 1, выберите строку, начиная с шага 3

Ожидаемый результат: после 4-х этапов есть результат в любом случае

Результат: нет строки в избранных, но строка существует (см через PhpMyAdmin)

mysqlPool.getConnection(function(err, connection) { 
     connection.query('SELECT * FROM x WHERE key = ? LIMIT 1', [ data.key ], function(err, result) { 
      if (result.length == 0) { 
       // this works, I verified through phpMyAdmin: 
       connection.query('INSERT INTO x SET ?', { key: data.key }); 
      } 
     }); 

     connection.query('SELECT * FROM x WHERE key = ? LIMIT 1', [ data.key ], function(err, result) { 
      if (result.length != 0) { 
       // Expecting to be here, but result[0] is undefined?! 
      } else { 
       // I END UP HERE? wtf 
      } 
     }); 
     connection.release(); 
    }); 

ли узел-MySQL потребность вид commit; или что-то?

Что я делаю неправильно?

ответ

2

Я считаю, что это связано с асинхронной природой узла, вам нужно будет вызвать второй выбор в обратном вызове после вставки. Что-то вроде следующего

mysqlPool.getConnection(function(err, connection) { 
    connection.query('SELECT * FROM x WHERE key = ? LIMIT 1', [ data.key ], function(err, result) { 
     if (result.length == 0) { 
      // this works, I verified through phpMyAdmin: 
      connection.query('INSERT INTO x SET ?', { key: data.key }, function(err, result){ 
       secondSelect(); 
      }); 
     } 
     else 
      secondSelect(); 
    }); 
}); 
+0

Это сделало трюк, поставив второй выбор внутри обратного вызова вставки. – DanFromGermany

Смежные вопросы