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

Php 如何在其他函数-Postgresql中使用返回id的值作为参数,php,postgresql,Php,Postgresql,单击按钮时,我希望发生两件事: 使用Insert_函数将表单数据插入表_1 使用表_1中新插入行的id作为函数的参数:other_func_name(id) insert_函数如下所示: function insert_function(jsnPolygon, callback) { delete jsnPolygon.id; // makes sure to give it a fresh id $.ajax({ url: 'php/insert_record.

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

  • 使用Insert_函数将表单数据插入表_1
  • 使用表_1中新插入行的id作为函数的参数:other_func_name(id)
  • insert_函数如下所示:

    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);
            }
        });
    };
    
    $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;
    
    $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;
    
    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 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);
            }
        });
    };
    
    $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;
    
    $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;
    
    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
        }); 
        });
    }
    
    插入数据很好,但是如何让其他函数名(id)理解id的值呢


    我使用的是PostgreSQL 12.0。

    插入的
    。。。返回
    query返回一个行集,就像
    select
    一样。您可以通过调用而不是调用来获取返回的值。

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

    首先,使用
    fetchColumn
    解决了从insert_记录获取id的问题,如下所示:

    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);
            }
        });
    };
    
    $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;
    
    $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;
    
    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\u函数(jsnPolygon)
    上。由于其异步性质,它没有返回任何内容。我用Promise解决了这个问题,并重写如下:

    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);
            }
        });
    };
    
    $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;
    
    $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;
    
    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")
                });
    

    希望对别人有帮助

    我对这个很陌生,所以我需要更多的线索。将“执行”更改为“查询”没有帮助。insert_函数中不应该有“return id;”或其他内容吗?是的,对query()的调用将返回一个行集。ID将位于第一行的第一列中。