我有一个 mysql 表,其中有一个名为“id”的列 - 该列设置了自动增量。
我只想知道如何使用 PHP 和 PDO 获得下一个自动增量值,而无需执行 INSERT INTO 查询。(我发现了一些关于此的问题 - 但没有 INSERT INTO 并且仅基于 mysqli)。
谢谢!
我有一个 mysql 表,其中有一个名为“id”的列 - 该列设置了自动增量。
我只想知道如何使用 PHP 和 PDO 获得下一个自动增量值,而无需执行 INSERT INTO 查询。(我发现了一些关于此的问题 - 但没有 INSERT INTO 并且仅基于 mysqli)。
谢谢!
你为什么需要这个?
如果需要,您可以像这样获得当前的自动增量值,但我看不到需要这样做的情况。
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND TABLE_NAME = 'TableName';
更多信息:
问题的陈述是错误的。
你实际上不需要它,因为没有 INSERT 查询,这个值绝对没有意义。
尽管我明白 PHP 语言的简单性欢迎任何人进入 Web 编程的世界,但它仍然需要一些知识。您必须了解的一件事是自动增量唯一标识符的目的和含义。这不是你想的那样。仅在插入之后才有意义,其他任何地方都没有。
因此,可能只有两种可能的情况:
我可以看到您想要/需要这个的原因。我们将其用作新客户安全的一部分,以保持“密钥”的唯一性,而无需向数据库发送额外的查询。
$q = $db->query("SHOW TABLE STATUS LIKE 'yourtable'");
$next = $q->fetch(PDO::FETCH_ASSOC);
echo $next['Auto_increment'];
一条线解决方案:
$var = $db->query("SHOW TABLE STATUS LIKE 'my_table'")->fetch(PDO::FETCH_ASSOC)['Auto_increment'];
要小心,因为在您询问下一个 ID 和您想使用它时,有人并发查询可以插入新记录并且您获得的 ID 不再有效
假设当你不知道名字的时候想添加新的人记录,想把 newPerson
将 id 写入 db newPerson
但这可能发生:
get1 id get2 id write1 到 db newPerson write2 到 db newPerson
其中 1 和 2 是恰好同时执行的两个并发脚本
简单的解决方法是使用事务,以避免这种情况