Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我需要运行两个查询_Javascript_Mysql_Sql_Node.js - Fatal编程技术网

Javascript 我需要运行两个查询

Javascript 我需要运行两个查询,javascript,mysql,sql,node.js,Javascript,Mysql,Sql,Node.js,我有一个应用程序,在该应用程序中,我将使用标识符在数据库中输入一条新记录 我的第一条语句是一条if语句,它包装了整个文档: if(body['id']&&body['business']&&body['contact_no']&&body['contact_email']&&body['addr_1']&&body['addr_2']&&body['post_code']&&body['gs_unit']&&body['gs_unit']时区]){ (一切都在这里) } 上面的if语句只是确保

我有一个应用程序,在该应用程序中,我将使用标识符在数据库中输入一条新记录

我的第一条语句是一条if语句,它包装了整个文档:

if(body['id']&&body['business']&&body['contact_no']&&body['contact_email']&&body['addr_1']&&body['addr_2']&&body['post_code']&&body['gs_unit']&&body['gs_unit']时区]){
(一切都在这里)
}
上面的if语句只是确保所有内容都有一个值(或者它存在)

下一步是运行查询,检查是否使用该id注册了内容:

var sql1=“从epas_plc中选择*,其中uid=?”;
conn.query(sql1,[id],函数(err1,resp1){
控制台日志(响应1.长度);
var rlength=resp1.length;
如果(resp1.length==1){
res.send({'status':'error','information':'id已经存在'});
返回;
}
});
上面的查询有效,如果存在匹配项,将给出列出的响应。 如果不存在上述查询中定义的匹配项,
rlength
,则应执行下一个查询:

if(rlength==0){
var sql=“插入epas_plc(uid、业务、联系人编号、联系人电子邮件、地址1、地址2、邮政编码、gs_单位、时区)的值(?,,,,,,,,,?)”;
连接查询(sql[id,body['business']、body['contact_no']、body['contact_email']、body['addr_1']、body['addr_2']、body['post_code']、body['gs_unit']、body['timezone']、函数(错误、响应){
如果(错误)抛出错误;
res.send({'status':'success','information':'已成功创建id为'+req.body.id}的条目);
})
}
不幸的是,这不起作用,因为
无法在发送邮件后设置邮件头。

是否有人知道如何解决此问题,和/或有嵌套查询


编辑:SQL模块是MYSQL

我认为您遇到的问题与“范围”和“异步”相关

第一,范围: 这里的“范围”问题是
var rlength=resp1.length在第一个查询的函数中声明

这意味着如果两个查询相互内联,如:

conn.query(sql1,[id], function (err1, resp1) {
    // ... 
    var rlength = resp1.length;
    // ... 
});

// You will find that 'rlength' is not defined
// console.log(typeof rlength);
if (rlength == 0) {
    // ...
}
通过将“if语句”放置在第一个查询函数中,可以解决此问题,如下所示:

conn.query(sql1,[id], function (err1, resp1) {
    // ...
    var rlength = resp1.length;
    // ...
    if (rlength == 0) {
        // ...
    }
});
第二,异步 如果代码的结构是这样的,那么这个问题就不那么明显了:

conn.query(sql1,[id], function (err1, resp1) {
    // ...
});

if (rlength == 0) {
    // ...
}

“if语句”将独立于查询是否完成而执行。这意味着“if语句”可以在查询之前执行

我可以看到您的代码中存在一些问题,例如
发送
语句之后的
返回
,以及何时检查错误。我提出这一解决办法:

var sql1 = "SELECT * FROM epas_plc WHERE uid = ?";

conn.query(sql1, [id], function(err1, resp1) {

    console.log(resp1.length);
    var rlength = resp1.length;
    if (err1) res.status(500).send({
        'msg': 'error found'
    });

    if (rlength == 1) {
        res.send({
            'status': 'error',
            'information': 'id already exsists'
        });
    } else {
        var sql = "INSERT INTO epas_plc (uid, business, contact_no, contact_email, addr_1, addr_2, post_code, gs_unit, timezone) VALUES(?,?,?,?,?,?,?,?,?)";

        conn.query(sql, [id, body['business'], body['contact_no'], body['contact_email'], body['addr_1'], body['addr_2'], body['post_code'], body['gs_unit'], body['timezone']], function(error, response) {

            if (error) res.status(500).send({
                'msg': 'error found'
            });

            res.send({
                'status': 'success',
                'information': 'successfully created entry with id: ' + req.body.id
            });
        })
    }

});

保持代码清晰很重要,使用
var rllength=resp1.length没有意义并在使用
if(resp1.length==1)检查之后{
。当发现一些错误时,您可以将其发送给调用它的人,因为它在请求范围内。

您使用的是哪个SQL模块?@scagood MYSQL。很抱歉没有在问题中包含这些,我已对其进行了编辑以包含这些错误。我可以在您的代码中看到一些问题,例如
发送后返回的问题以及何时检查错误,因此您可以你可以这样做吗?你应该可以通过@LucasCosta来完成这个请求谢谢!很棒的代码,谢谢你帮我解决它!