Вставка в две таблицы не работает. Есть ли правильный путь? - PullRequest
0 голосов
/ 26 июня 2018

Возникли проблемы при попытке заставить этот код работать. Возможно, я шел в неправильном направлении, но я, по сути, вставляю некоторые данные в одну таблицу, например, имя пользователя и тип пароля, тогда как в другой таблице будет указана информация о клиенте.

   connection.connect(function(error) {
  if (error) {
    console.error('error connecting: ' + error.stack);
    return;
  }
  console.log('connected as id ' + connection.threadId);
});

ex.get("/create-user", function(req, res, next)  {
//use err or error?
connection.beginTransaction(function(error){
  if (error) {throw error;}
  connection.query('Insert into users( user_name, user_password, user_type) values (?,?,?)', [req.query.userName, req.query.password, req.query.Customer=1], function (error, results, fields) {
    console.log(req.query);
    if (error) {
      connection.rollback(function(){
        throw error;
      });      
    }

      connection.query('Insert into customers(cust_first_name, cust_last_name, cust_email, cust_city, cust_address, cust_zip_code, cust_state, cust_phone_num, cust_role, cust_website, cust_business_name) values (?,?,?)', [req.query.custFirstName, req.query.custLastName, req.query.custEmail, req.query.custCity, req.query.custAddress, req.query.custZipcode, req.query.custState, req.query.custPhone, req.query.custRole, req.query.custWebsite], [req.query.userName, req.query.password, req.query.Customer=1], function (error, results, fields) {
      if (error) {
        connection.rollback(function(){
          throw error;
        });
      }
      connection.commit(function(error){
          if (error) {
            connection.rollback(function(){
              throw error;
            });
          }
          console.log('transaction complete');
          connection.end();
        });
      });
    res.end(JSON.stringify(results));
    });
  });
});
var server = http.createServer(ex);
server.listen(8080);

1 Ответ

0 голосов
/ 26 июня 2018
connection.query('Insert into customers(cust_first_name, cust_last_name, cust_email, 
  cust_city, cust_address, cust_zip_code, cust_state, cust_phone_num, cust_role, 
  cust_website, cust_business_name) 
values (?,?,?)', 
[req.query.custFirstName, req.query.custLastName, req.query.custEmail, 
 req.query.custCity, req.query.custAddress, req.query.custZipcode,  
 req.query.custState, req.query.custPhone, req.query.custRole, 
 req.query.custWebsite], 
[req.query.userName, req.query.password, req.query.Customer=1], 

Указывает 11 столбцов, но у вас есть только три ? заполнителя.

Затем вы передаете 10 значений в следующем аргументе. Тебе нужно 11.

И вы необъяснимым образом передаете дополнительный набор из трех значений, которые выглядят как копирование и вставка из более ранней INSERT.

Вам нужно иметь ровно один ? для каждого столбца в INSERT, а затем передавать ровно одно значение для каждого ?.

Возможно, вы сочтете этот альтернативный синтаксис INSERT более интуитивным:

Insert into customers set cust_first_name=?, cust_last_name=?, cust_email=?,
   cust_city=?, cust_address=?, cust_zip_code=?, cust_state=?, cust_phone_num=?, 
   cust_role=?, cust_website=?, cust_business_name=?

Это настраиваемый синтаксис MySQL (не будет работать в других брендах SQL), но он значительно упрощает сопоставление числа ? заполнителей с количеством столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...