如何在其他函数中使用RETURNING id中的值作为参数-Postgresql

单击按钮时,我希望发生两件事:

  1. 使用insert_function将表格数据插入到table_1中。
  2. 使用table_1中新插入的行的id作为函数的参数:other_func_name(id)。
$("#button_id").click(function(){
var jsnPolygon = returnFormData("class_name");
jsnPolygon.tbl = "table_1";
var id = insert_function(jsnPolygon);
other_func_name(id);
});

insert_function看起来像这样:

function insert_function(jsnPolygon,callback) {
    delete jsnPolygon.id; // makes sure to give it a fresh id
    $.ajax({
        url: 'php/insert_record.php',data: jsnPolygon,type: 'POST',success: function (response) {
            if (response.substr(0,5) == "ERROR") {
                alert(response);
            } else {
                switch (jsnPolygon.tbl) {
                    case "table_1":
                        break;    
                }
            }
        },error: function (xhr,status,error) {
            alert("AJAX Error: " + error);
        }
    });
};

insert_record查询如下所示:

$sqlQuery="INSERT INTO {$table} ({$keys}created,createdby,modified,modifiedby) 
           VALUES ({$vals}current_date,'{$username}',current_date,'{$username}') 
           RETURNING id";
            $result = $pdo->prepare($sqlQuery);
            $result->execute($_POST);
            echo $sqlQuery;

插入数据工作正常,但是如何获取other_func_name(id)来了解id的值?

我正在使用PostgreSQL 12.0。

zhanglun0909 回答:如何在其他函数中使用RETURNING id中的值作为参数-Postgresql

insert ... returning查询返回的行集与select类似。您可以通过调用query而不是execute来获取返回的值。

,

经过漫长的两天和多次精神崩溃,我终于设法解决了这个问题。事实证明,这是几个挑战。

首先,使用fetchColumn解决了从insert_record中获取ID的问题,如下所示:

$sqlQuery="INSERT INTO {$table} ({$keys}created,createdby,modified,modifiedby) 
VALUES ({$vals}current_date,'{$username}',current_date,'{$username}') 
RETURNING id as id";
            $result = $pdo->prepare($sqlQuery);
            $result->execute($_POST);
            $id = $result->fetchColumn();
echo $id;

然后,insert_function(jsnPolygon)的构建方式出现了一个新问题。由于其异步特性,它什么也没返回。我通过使用Promise解决了它,并像这样重写它:

function insert_function(jsnPolygon,callback) {
    delete jsnPolygon.id; // makes sure to get a fresh id
    return new Promise((resolve,reject)=>{
    $.ajax({
        url: 'php/insert_record.php',data: jsnPolygon,type: 'POST',success: resolve,error: reject
    }); 
    });
}

然后,最终将点击事件的棘手部分更改为:

insert_function(jsnPolygon).then(result =>{
                var id = result;
                other_func_name(id);
            })
            .catch(err =>{
                alert("ERROR")
            });

希望对某人有所帮助!

本文链接:https://www.f2er.com/3159768.html

大家都在问