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

问题描述 投票:0回答:5

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

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

谢谢!

php mysql pdo auto-increment
5个回答
1
投票

你为什么需要这个?

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

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

更多信息:


0
投票

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

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

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

  • 要么你真的需要一个新生成的id - 然后只需插入一条记录,获取该ID并使用它
  • 或者你把这个值与其他东西混淆,因此根本不需要它

0
投票

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

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

0
投票

一线解决方案:

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

0
投票

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

让我们说当你不想知道名字的时候想要添加新人记录时,想要把newPerson

获取id写入db newPerson

但这可能发生:

get1 id get2 id db1到db newPerson write2到db newPerson

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

轻松修复将使用事务,以避免这种情况

© www.soinside.com 2019 - 2024. All rights reserved.