首页 > 解决方案 > 检查mysql数据库中是否存在相同的流派

问题描述

大家好,我是 mysql 新手,想测试数据库中是否存在相同的流派,如果存在则返回状态代码,如果流派不存在,则将流派添加到数据库中。我目前遇到以下问题,它能够检查流派是否存在并返回状态代码,但是当输入不同的流派时,它的反应方式与流派存在的方式相同:

文件 1

Insertgenre:function(genre,description,callback){

        var dbConn=db.getConnection();
    
        // connects to the mysql database (contains an asyn function that returns a callback)
        dbConn.connect(function(err){
            if(err){
                console.log(err);
                return callback(err,result);
    
            }else{
                // Query for get all rows from genre table where genre = entered genre
                var checkSql = 'SELECT genre FROM genre WHERE genre = ?';
                
                dbConn.query(checkSql, [genre], function(err1, result) {
                    
                    if(err) {
                        return callback(err,result);
                    
                    }else {
                        // Checking if the result length is more than 0.
                         if(result.length > 0) {
                             return callback(err1,result);
                         }else {
                            var sql="insert into genre(genre,description) values(?,?)";
                            dbConn.query(sql,[genre,description],function(err,result){
                                  dbConn.end();
                            
                            if(err) {
                                console.log(err);
                            } 
                            return callback(err,result);
                            
                        }
                    }
                    }
                });

文件 2

app.post('/genre', function(req,res){
    var genre = req.body.genre;
    var description = req.body.description;
    

    genreDB.Insertgenre(genre,description,function(err,err1,result){
        if(err){
            //console.log(err)
            res.type('json');
            res.statusCode=500;
            res.send(`{"Result":"Internal Error"}`);

        }if(err1){
            console.log(err1)
            res.type('json');
            res.statusCode=422;
            res.send(`{"Result":"The genre name provided already exists"}`);
        }
        else{
            res.type("json");
            res.statusCode=204;
            //res.send(result);
            console.log(result);
            res.send(`{"Affected Rows":"${result.affectedRows}"}`);
        }

    });
});

标签: javascriptmysql

解决方案


您的回调函数预计err是一个正常的数据库错误,并err1表明该流派已经存在。

您需要callback()使用 3 个参数调用以匹配它的预期。

你也有错别字。在第二个查询中,回调函数的参数是err1,但您使用的是if(err).

在文件 2 中,您应该使用,else if(err1)因为所有这些条件都是互斥的。

Insertgenre: function(genre, description, callback) {

    var dbConn = db.getConnection();

    // connects to the mysql database (contains an asyn function that returns a callback)
    dbConn.connect(function(err) {
      if (err) {
        console.log(err);
        return callback(err, false, result);

      } else {
        // Query for get all rows from genre table where genre = entered genre
        var checkSql = 'SELECT genre FROM genre WHERE genre = ?';

        dbConn.query(checkSql, [genre], function(err1, result) {

            if (err1) {
              return callback(err1, false, result);

            } else {
              // Checking if the result length is more than 0.
              if (result.length > 0) {
                return callback(null, true, result);
              } else {
                var sql = "insert into genre(genre,description) values(?,?)";
                dbConn.query(sql, [genre, description], function(err, result) {
                    dbConn.end();

                    if (err) {
                      console.log(err);
                    }
                    return callback(err, false, result);

                  }
                }
              }
            });
        });
    })


推荐阅读