使用PDO从MySQL表中获取下一个自动增量(无INSERT)

时间:2013-08-29 10:31:21

标签: php mysql pdo auto-increment

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

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

谢谢!

5 个答案:

答案 0 :(得分:1)

你为什么需要这个?

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

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

更多信息:

答案 1 :(得分:0)

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

虽然我确实理解PHP语言的简单性欢迎任何人进入网络编程世界,但它仍然需要一些知识。您必须了解的一件事是自动增量唯一标识符的用途和含义。这不是你的想法。只有在插入之后才有意义。

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

  • 要么你真的需要一个新生成的id - 然后只是插入一条记录,得到那个id并使用它
  • 或者您将此值与其他内容混淆,因此根本不需要它

答案 2 :(得分:0)

我可以看到你想要/需要这个的原因。我们将其作为新客户的安全保护的一部分,以保持关键'唯一的,无需向DB发送其他查询。

$q = $db->query("SHOW TABLE STATUS LIKE 'yourtable'");
$next = $q->fetch(PDO::FETCH_ASSOC);
echo $next['Auto_increment'];

答案 3 :(得分:0)

一线解决方案:

$var = $db->query("SHOW TABLE STATUS LIKE 'my_table'")->fetch(PDO::FETCH_ASSOC)['Auto_increment'];

答案 4 :(得分:0)

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

假设您想在不知道姓名的情况下添加新人记录,而要放置newPerson

获取ID 写入db newPerson

但这可能发生:

获取1个ID get2 id 将1写入db newPerson 将2写入db newPerson

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

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