如何从数据库中获取最后插入的 id 并将其发送到组件?

Posted

技术标签:

【中文标题】如何从数据库中获取最后插入的 id 并将其发送到组件?【英文标题】:How to get the last inserted id from database and send it to the component? 【发布时间】:2019-09-21 04:29:41 【问题描述】:

我想通过获取 api 从数据库中获取最后一个 id,

问题出在表 MaterialUnit materialID 显示为 0 console.log 在服务器上运行良好! 这里是 server.js

app.get('/AddProducts', function (req, res) 
    const  materialName, description, categoryID, manufactureID, currencyID = req.query;
    const INSERT_MATERIAL = `INSERT INTO material (materialName, description, categoryID, manufactureID, currencyID) VALUES 
                                ('$materialName','$description','$categoryID','$manufactureID','$currencyID')`;
    connection.query(INSERT_MATERIAL, (error, result) => 
        if(error) 
            return res.send(error)
        
        else 
            console.log(result.insertId);
            return res.json(id: result.insertId)
        
    );
);

app.get('/AddMaterialUnits', function (req, res) 
    const  materialID, unitID, def, rate, price, vat, bar = req.query;
    const INSERT_MATERIAL = `INSERT INTO materialunit (materialID, unitID, barcodeNo, salePrice, vatValue, isdefault, rate) VALUES 
                                ('$materialID','$unitID','$bar','$price','$vat','$def' ,'$rate')`;
    connection.query(INSERT_MATERIAL, (error, result) => 
        if(error) 
            return res.send(error)
        
        else 
            return res.send(result)
        
    );
);

然后在组件中:

 AddProduct() 
        let url1 = `http://localhost:3000/AddProducts?materialName=$this.state.name&description=$this.state.description&categoryID=$this.state.catID&manufactureID=$this.state.manID&currencyID=$this.state.curID`;
        fetch(url1)
            .catch(error => console.error(error))
            .then(alert("Added successfully"))
            .then((result) => this.setState(materialID: result.id))
            .then(alert(this.state.materialID));


        this.state.materialUnits.map(obj =>
            fetch(`http://localhost:3000/AddMaterialUnits?materialID=$this.state.materialID&unitID=$obj.unit.id&def=$obj.default.value&rate=$obj.rate&price=$obj.price&vat=$obj.vat&bar=$obj.barcodeNo`)
                .catch(error => console.error(error))
                .then(alert("Added successfully"))
            )
    

【问题讨论】:

您能否详细说明发生了什么问题,因为根据this duplicate,您做得正确。 确定可以,您使用的是什么数据库? 不确定!我正在使用 mysql 和 expressjs 取到后materialID的值为0 您的插入查询是什么?可以发一下吗? 【参考方案1】:

问题是id 没有设置为AUTO_INCREMENT,它始终是0。要解决此问题,您需要在 sql 语句中手动添加它,我不建议这样做。例如INSERT INTO MATERIAL (id, ...) VALUES(12, ...)

让 MySQL 为您做增量。通过在 phpmyadmin 中运行以下命令,修改您的表并将 id 设置为 AUTO_INCREMENT

ALTER TABLE `material` ADD INDEX(`id`);
ALTER TABLE `material` MODIFY COLUMN id INT AUTO_INCREMENT

注意:在运行这些查询之前,您需要清空表。

如果出现错误,您可能需要重新创建表。使用以下命令删除表并创建一个新表。根据自己的喜好更改列的长度/值。

CREATE TABLE `material` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `materialName` varchar(500) NOT NULL,
  `categoryID` varchar(500) NOT NULL,
  `description` varchar(500) NOT NULL,
  `manufactureID` varchar(500) NOT NULL,
  `currencyId` varchar(500) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

【讨论】:

以上是关于如何从数据库中获取最后插入的 id 并将其发送到组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取最后插入的自动递增 id 并将其插入 laravel 中的另一个表中?

在php中将最后一个id插入变量发送到另一个页面[重复]

如何以雄辩的方式将最后一个 id 插入数据库中?

如何从表中获取最后一个插入 ID

如何从 JayData 事务中获取最后插入 ID?

如何从表中获取数据并将其插入另一个表?