【发布时间】:2017-04-05 07:36:50
【问题描述】:
我有一个从数据库表中导入 221 行的表。每当我在 HTML 表格页面中动态添加一行时,我希望它能够提取 MAX ID,因此在本例中为 221,并向其添加 1,因此将 MR_ID 设为 222。我需要这个,因为每个 ID 都必须是独一无二的。每当我在表中添加一行并在数据库中查看它时,它都会显示为 NULL。我有一些东西,但它似乎没有工作。如果您需要的代码比我发布的更多,请告诉我,我会提供。谢谢!
<?php
$MR_ID = $_POST['MR_ID'];
$MR_Name = $_POST['MR_Name'];
$Buyer_ID = $_POST['Buyer_ID'];
$MR_POC_N = $_POST['MR_POC_N'];
$MR_POC_E = $_POST['MR_POC_E'];
$MR_POC_P = $_POST['MR_POC_P'];
$host="xxxxxxx";
$dbName="xxxx";
$dbUser="xxxxxxxxxxx";
$dbPass="xxxxxxxxx";
$pdo = new PDO("sqlsrv:server=".$host.";Database=".$dbName, $dbUser, $dbPass);
$MR_ID = "Select MAX(MR_ID) + 1 FROM Stage_Rebate_Master";
$sql = "INSERT INTO Stage_Rebate_Master (MR_ID, MR_Name, Buyer_ID, MR_POC_N, MR_POC_E, MR_POC_P) VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $pdo->prepare($sql);
$result = $stmt->execute(array($MR_ID, $MR_Name, $Buyer_ID, $MR_POC_N, $MR_POC_E, $MR_POC_P));
echo json_encode($result);
?>
【问题讨论】:
-
max+1 取决于竞争条件。为什么不将 MR_ID 设置为标识或 auto_increment 并让数据库处理它以避免竞争条件?
-
我确实有另一个自动递增的列,并且可以用作实际 ID....但是这个 MR_ID 列被用作整个数据库的查找,所以我不能只有 NULL 值
-
在非键值上关联表似乎是一种奇怪的方式......我想你可以使用触发器在更新之前将 MR_ID 设置为自动递增的值。 (假设这个 DBMS 使用触发器)
-
我的意思是我可以将 MR_ID 列设置为自动增量或像你说的那样......从我所看到的情况来看,似乎 MR_ID 发布为 0 并且看不到有多少MR_IDs 我实际上是为了做 MAX。是的,DBMS 确实使用了触发器。
-
@BillKarwin 谢谢,做到了!
标签: sql sql-server insert auto-increment