2009-09-03 81 views
8

我知道这是不是很复杂,但我不记得怎么做。获取下一个自动递增

我只需要知道下一个自动递增。

$result = mysql_query(" 
    SHOW TABLE STATUS LIKE Media 
"); 
$data = mysql_fetch_assoc($result); 
$next_increment = $data['Auto_increment']; 

...但我不会为我工作,我究竟做错了什么?

回答

16
$result = mysql_query(" 
    SHOW TABLE STATUS LIKE 'Media' 
"); 
$data = mysql_fetch_assoc($result); 
$next_increment = $data['Auto_increment']; 

所需要的表的名称用单引号这样的包裹:'table_name'

所以现在工作得很好。

:)

+0

伟大的作品!使用next_increment id作为外键插入到另一个表中足够可靠吗? – 2011-03-27 16:20:57

+0

从longneck如下:“如果......你有多个用户[使用表格]在同一时间,你会经常得到错误的值。” – Andrew 2011-04-24 14:40:20

8

查询应该是这样的:

SHOW TABLE STATUS WHERE `Name` = 'Media'; 
2

的另一种方式,但是速度慢,就是:

SELECT AUTO_INCREMENT FROM information_schema.`TABLES` T where TABLE_SCHEMA = 'myScheme' and TABLE_NAME = 'Media'; 

INFORMATION_SCHEMA信息主要是有用的,可从多种方案中获取数据。

+0

为什么这很慢? – 2009-12-20 07:51:20

+2

这是缓慢的,因为对于包含数千个数据库(或上百万),或表,INFORMATION_SCHEMA分贝变得令人难以置信的大。最好使用'SHOW TABLE STATUS LIKE'tableName''查询。 – 2010-04-04 23:39:47

-2

如果您需要知道下一个 auto_increment,那么99%可能你做错了。而不是获得下AUTO_INCREMENT,你应该做你想说的话插入,然后使用SELECT LAST_INSERT_ID()获得从插入AUTO_INCREMENT值。

如果你试图猜测下一个AUTO_INCREMENT值,并有多个用户在同一时间做这件事,你会经常得到错误的值。

+0

-1因为如果表格没有任何条目,但是自动增量是在那里呢? – 2012-01-10 10:03:08

+0

那么你仍然在做错事。在什么情况下你想要这样做? OP希望获得下一个值,以便他们可以在另一个表中设置外键。这是一个坏主意。记录应首先插入到此表中,然后获取已创建的自动增量值,然后插入外键。反过来这样做就好比在把钥匙放进点火器之前问你怎么把你的车从车库里取出来。 – longneck 2012-01-10 14:14:22

+0

不是重点。问题是,问题是“如何获得下一个自动增量”而不是“如何获得最后插入的ID”。所以基本上,如果表格是空的,并且你想知道下一个自动增量来创建邮票标题(例如:“Stamptitle-22”)。然后最后插入的ID不会工作。 – 2012-01-10 16:06:56

0

您也可以使用此功能

function getNextValue(){ 
$query = "SHOW TABLE STATUS LIKE 'vendors'"; 
dbconnect(); 
$results=mysql_query($query); 
if(mysql_errno() != 0) { 
    $result['count'] = -1; 
    $result['error'] = "Error: ".mysql_error(); 
} else { 
    $result['count'] = mysql_num_rows($results); 
    for($counter=0;$counter<$result['count'];$counter++) { 
     $result[$counter] = mysql_fetch_assoc($results); 
    } 
} 
return $result[0]['Auto_increment']; 
mysql_close(); 
}