如何从数据库中获取最后插入的 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¤cyID=$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 并将其发送到组件?的主要内容,如果未能解决你的问题,请参考以下文章