我有一个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之间以及何时想要使用它时,某个concurent查询可以插入新记录并且您获得的ID不再有效
让我们说当你不想知道名字的时候想要添加新人记录时,想要把newPerson
获取id写入db newPerson
但这可能发生:
get1 id get2 id db1到db newPerson write2到db newPerson
其中1和2是碰巧同时执行的两个并发脚本
轻松修复将使用事务,以避免这种情况