使用php mysql插入后如何获取列值?

时间:2018-10-08 14:54:46

标签: php mysql phpmyadmin

在此代码中,在向DB中插入值之后。我正在执行选择查询以选择invoiceNo($ sql1 =“通过invoiceID desc限制1从发票顺序中选择invoiceNo”;)。而不是从DB中选择如何获取InvoiceNo?

例如:假设有两个用户。两个用户同时插入InvoiceID。执行“从发票顺序中按发票ID Des Limit 1选择发票No.”时,这将获得最后一个发票ID。我需要获取特定的发票ID( (针对特定用户)。如何获取?

$query          = "select * from invoices order by invoiceID desc limit 1";
$result         = $link->query($query);
$row            = $result->fetch_assoc();
$invoiceNo      = $row["invoiceNo"];
$getinvoiceNo   = str_pad($invoiceNo + 1, 4, 0, STR_PAD_LEFT); //inserting like 0000
$sql            = "INSERT INTO invoices (invoiceNo)
                   VALUES ('$getinvoiceNo')";
if ($link->query($sql) === TRUE) {
   //echo "1";
   $sql1    = "select invoiceNo from invoices order by invoiceID desc limit 1";
   $last_id = mysqli_insert_id($link, $sql1);
   $result1 = mysqli_query($link, $sql1);
   $row1    = mysqli_fetch_array($result1);
   echo json_encode($row1);
} else {
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
mysql_close($link);

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么您担心记录的并发更新可能会破坏数据。

我认为您应该看看mysql SELECT ... FOR UPDATE的语法,它应该按照您的要求进行操作:锁定选定的行,直到触发更新为止。然后锁将被释放。

例如:

SELECT table_field FROM table_name WHERE table_id_field = id_param FOR UPDATE

将锁定选定的行,直到

UPDATE table_name SET table_field = table_field + 1 WHERE table_id_field = id_param

答案 1 :(得分:0)

如果要防止发票编号冲突,只需将表创建为

CREATE TABLE invoices (
     invoiceID INTEGER NOT NULL AUTO_INCREMENT,
     other columns . . .
     PRIMARY KEY (invoiceID)
);

然后,当您执行INSERT时,请勿插入invoiceID并让MySQL执行。

这将确保每个新发票都有唯一的发票ID。