2009-09-03 14 views
8

Ich weiß, das ist nicht so kompliziert, aber ich kann mich nicht erinnern, wie zu tun ist.Holen Sie sich das nächste automatische Inkrement

Ich muss nur das nächste automatische Inkrement wissen.

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

... aber ich werde nicht für mich arbeiten, was mache ich falsch?

Antwort

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

Der Name der Tabelle benötigt, um mit einfachen Anführungszeichen wie folgt gewickelt werden: 'table_name'

So funktioniert es jetzt gut.

:)

+0

Funktioniert prima verwenden !! Ist es zuverlässig genug, die next_increment-ID als Fremdschlüssel zum Einfügen in eine andere Tabelle zu verwenden? –

+0

Von Longneck unten: "Wenn ... Sie mehrere Benutzer [die Tabelle verwenden] zur gleichen Zeit haben, erhalten Sie häufig den falschen Wert." – Andrew

8

Die Abfrage sollte wie folgt aussehen:

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

andere Art und Weise, aber langsam ist:

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

Die information_schema meist ist nützlich für Daten aus vielen Schemata bekommen .

+0

Gründe, warum das langsam ist? –

+2

Dies ist langsam, da für Datenbanken mit Tausenden (oder Millionen) oder Tabellen die Datenbank "Information_schema" unglaublich groß wird. Am besten verwenden Sie die 'SHOW TABLE STATUS LIKE 'Tabellenname'' Abfrage. –

-2

Wenn Sie die nächste auto_increment wissen müssen, dann ist es 99% wahrscheinlich, dass Sie es falsch machen. Anstatt das nächste auto_increment zu erhalten, sollten Sie einfach die Einfügung durchführen, die Sie gerade tun, und dann SELECT LAST_INSERT_ID() verwenden, um den auto_increment-Wert von dieser Einfügung zu erhalten.

Wenn Sie versuchen, den nächsten auto_increment-Wert zu erraten und mehrere Benutzer gleichzeitig ausführen, erhalten Sie häufig den falschen Wert.

+0

-1 Was passiert, wenn die Tabelle keine Einträge hat, aber das automatische Inkrement vorhanden ist? –

+0

dann machst du immer noch etwas falsch. Unter welchen Umständen möchten Sie dies tun? Das OP möchte den nächsten Wert erhalten, damit sie einen Fremdschlüssel in einer anderen Tabelle setzen können. Das ist eine schlechte Idee. Der Datensatz sollte zuerst in diese Tabelle eingefügt werden, dann den Wert für den automatischen Inkrement, der erstellt wurde, und dann den Fremdschlüssel einfügen. Umgekehrt ist es, als würde man fragen, wie man sein Auto aus der Garage lässt, bevor man den Schlüssel in die Zündung steckt. – longneck

+0

Nicht der Punkt. Punkt ist, dass die Frage war, "wie man nächsten automatischen Zuwachs" nicht "erhält, wie man letzte eingefügte Identifikation erhält". Also im Grunde, wenn die Tabelle leer ist, und Sie möchten das nächste automatische Inkrement kennen, um einen Stempel-Titel zu erstellen (Beispiel: "Stamptitle-22"). Dann wird die zuletzt eingefügte ID nicht funktionieren. –

0

Sie können diese Funktion auch

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