2009-09-03 3 views
8

So che non è così complicato ma non riesco a ricordare come fare.Ottieni il successivo incremento automatico

Ho solo bisogno di conoscere il prossimo incremento automatico.

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

... ma non lavorerò per me, cosa sto sbagliando?

risposta

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

Il nome della tabella necessaria per avvolgere con apici come questo: 'table_name'

Così funziona bene ora.

:)

+0

Opere grande !! È abbastanza affidabile usare l'id next_increment, come chiave esterna per l'inserimento in un'altra tabella? –

+0

Da longneck qui sotto: "Se ... hai più utenti [usando la tabella] allo stesso tempo, otterrai spesso il valore sbagliato." – Andrew

8

La query dovrebbe essere simile a questo:

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

Un altro modo, ma lento, è:

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

L'information_schema è per lo più utile per ottenere i dati da molti schemi .

+0

motivi per cui questo è lento? –

+2

Questo è lento perché per i database contenenti migliaia (o milioni) o tabelle, il d_ information_schema diventa incredibilmente grande. Meglio usare la query 'STATO TABELLA STATO COME 'tableName''. –

-2

se è necessario conoscere il successivo a auto_increment, quindi è il 99% probabile che tu stia sbagliando. invece di ottenere il prossimo auto_increment, dovresti semplicemente fare l'inserto che stai per fare, quindi usare SELECT LAST_INSERT_ID() per ottenere il valore auto_increment da quel inserto.

se si tenta di indovinare il prossimo valore auto_increment e si hanno più utenti che lo fanno contemporaneamente, spesso si ottiene il valore errato.

+0

-1 Perché se la tabella non ha voci, ma l'incremento automatico è lì? –

+0

quindi stai ancora facendo qualcosa di sbagliato. sotto quale possibile circostanza vorresti farlo? l'OP vuole ottenere il valore successivo in modo che possano impostare una chiave esterna in un'altra tabella. Questa è una cattiva idea. il record deve essere inserito prima in questa tabella, quindi ottenere il valore di incremento automatico che è stato creato, quindi inserire la chiave esterna. fare il contrario è come chiedere di far uscire l'auto dal garage prima di inserire la chiave nell'accensione. – longneck

+0

Non è il punto. Il punto è che la domanda era "Come ottenere il prossimo incremento automatico" non "Come ottenere l'ultimo ID inserito". Quindi, in sostanza, se la tabella è vuota e si desidera conoscere il successivo incremento automatico per creare un titolo timbro (esempio: "Stamptitle-22"). Quindi l'ultimo ID inserito non funzionerà. –

0

È inoltre possibile utilizzare questa funzione

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(); 
}