代码之家  ›  专栏  ›  技术社区  ›  Wahrenheit Sucher

插入两个表不起作用。有合适的方法吗?

  •  1
  • Wahrenheit Sucher  · 技术社区  · 8 年前

    无法使此代码正常工作。也许我走错了方向,但实际上我在一个表中插入了一些数据,比如密码用户名和类型,而另一个表将包含客户信息。

       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 回复  |  直到 8 年前
        1
  •  1
  •   Bill Karwin    8 年前
    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列,但只有3列 ? 占位符。

    然后在下一个参数中传递10个值。你需要11个。

    而且您还莫名其妙地传递了一组额外的三个值,这些值看起来像是先前插入的复制粘贴。

    你需要一个 是吗? 对于插入中的每一列,然后只为每一列传递一个值 是吗? .

    您可能会发现插入的这种可选语法更直观:

    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),但它使匹配 是吗? 具有列数的占位符。