【发布时间】:2020-08-06 19:55:13
【问题描述】:
我对 PHP 中的 Seq 有一些疑问。 我创建 1 个表来维护序列表, 前任。表是序列,字段是序列(从1开始) 序列应该是唯一值。
问题是。 有 2 个并行运行的进程将使用它。 我收到了重复值的错误消息。
问题。 如何从另一个选择查询中锁定表?
这是我的代码
//select seq
$sqlSeq = "select seq from sequence for update";
$resultSeq = pg_query($sqlSeq);
$rowSeq = pg_fetch_assoc($resultSeq);
$seqCif = $rowSeq['seq'];
//INSERT
$sqlInsert1 ="insert into TEST (customer_id) values( '".$seqCif."')";
//UPDATE
$sqlInsert1 .= "update sequence set seq=seq+1;" ;
你能帮我处理这个案子吗? 非常感谢..
【问题讨论】:
-
为什么不用postgresql内置的序列呢? postgresql.org/docs/9.5/sql-createsequence.html
-
因为您的代码包含 SQL 注入,请查看此处了解更多信息:owasp.org/www-community/attacks/SQL_Injection
-
嗨@FelippeDuarte,如果我使用自动递增,如果插入失败,序列仍然递增,那就是问题所在。我不能跳过这个号码。
-
@Inazo 是的,我知道,但是这个工具是供内部使用的。所以我认为是安全的......
-
然后使用事务
标签: php sql postgresql sql-insert