1

我有一个 mysql 表,其中有一个名为“id”的列 - 该列设置了自动增量。

我只想知道如何使用 PHP 和 PDO 获得下一个自动增量值,而无需执行 INSERT INTO 查询。(我发现了一些关于此的问题 - 但没有 INSERT INTO 并且仅基于 mysqli)。

谢谢!

4

5 回答 5

1

你为什么需要这个?

如果需要,您可以像这样获得当前的自动增量值,但我看不到需要这样做的情况。

SELECT `AUTO_INCREMENT`
FROM  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND   TABLE_NAME   = 'TableName';

更多信息:

于 2013-08-29T10:35:26.817 回答
0

问题的陈述是错误的。
你实际上不需要它,因为没有 INSERT 查询,这个值绝对没有意义。

尽管我明白 PHP 语言的简单性欢迎任何人进入 Web 编程的世界,但它仍然需要一些知识。您必须了解的一件事是自动增量唯一标识符的目的和含义。这不是你想的那样。仅在插入之后才有意义,其他任何地方都没有。

因此,可能只有两种可能的情况:

  • 要么你真的需要一个新生成的 id - 然后只需插入一条记录,获取该 id 并使用它
  • 或者您将此值与其他值混淆,因此根本不需要它
于 2013-08-29T10:44:42.780 回答
0

我可以看到您想要/需要这个的原因。我们将其用作新客户安全的一部分,以保持“密钥”的唯一性,而无需向数据库发送额外的查询。

$q = $db->query("SHOW TABLE STATUS LIKE 'yourtable'");
$next = $q->fetch(PDO::FETCH_ASSOC);
echo $next['Auto_increment'];
于 2015-08-15T20:11:51.067 回答
0

一条线解决方案:

$var = $db->query("SHOW TABLE STATUS LIKE 'my_table'")->fetch(PDO::FETCH_ASSOC)['Auto_increment'];
于 2017-09-15T14:40:03.247 回答
0

要小心,因为在您询问下一个 ID 和您想使用它时,有人并发查询可以插入新记录并且您获得的 ID 不再有效

假设当你不知道名字的时候想添加新的人记录,想把 newPerson

将 id 写入 db newPerson

但这可能发生:

get1 id get2 id write1 到 db newPerson write2 到 db newPerson

其中 1 和 2 是恰好同时执行的两个并发脚本

简单的解决方法是使用事务,以避免这种情况

于 2019-03-20T22:45:29.630 回答