【问题标题】:How to get the last inserted id from database and send it to the component?如何从数据库中获取最后插入的 id 并将其发送到组件?
【发布时间】: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
  • 您的插入查询是什么?可以发一下吗?

标签: mysql node.js reactjs express jsx


【解决方案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;

【讨论】:

    猜你喜欢
    • 2021-07-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2015-03-20
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多