2009-09-03 17 views
8

Sé que esto no es tan complicado pero no recuerdo cómo hacerlo.Obtenga el siguiente incremento automático

Solo necesito saber el próximo incremento automático.

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

... pero no funcionaré para mí, ¿qué estoy haciendo mal?

Respuesta

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

El nombre de la tabla necesario para envolver con comillas simples como este: 'table_name'

Así funciona bien ahora.

:)

+0

Funciona muy bien !! ¿Es lo suficientemente confiable para usar la identificación next_increment, como clave foránea para insertar en otra tabla? –

+0

De cuello largo a continuación: "Si ... tiene varios usuarios [usando la tabla] al mismo tiempo, con frecuencia obtendrá el valor incorrecto". – Andrew

8

La consulta debería tener este aspecto:

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

Otra forma, pero lento, es:

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

El INFORMATION_SCHEMA es sobre todo útil para obtener datos de muchos esquemas .

+0

¿Por qué esto es lento? –

+2

Esto es lento porque para bases de datos que contienen miles (o millones) o tablas, information_schema db se vuelve increíblemente grande. Es mejor usar la consulta 'SHOW TABLE STATUS LIKE 'tableName''. –

-2

si necesita saber next auto_increment, entonces es 99% probable que lo esté haciendo mal. en lugar de obtener el próximo autoincremento, solo debes hacer la inserción que estás a punto de hacer, luego usa SELECT LAST_INSERT_ID() para obtener el valor auto_increment de esa inserción.

Si intenta adivinar el siguiente valor de auto_increment y tiene varios usuarios haciéndolo al mismo tiempo, con frecuencia obtendrá el valor incorrecto.

+0

-1 ¿Qué pasa si la tabla no tiene ninguna entrada, pero el incremento automático está allí? –

+0

entonces todavía estás haciendo algo mal. ¿bajo qué circunstancia posible querrías hacer esto? el OP quiere obtener el siguiente valor para que puedan establecer una clave foránea en otra tabla. esta es una mala idea. el registro debe insertarse primero en esta tabla, luego obtener el valor de incremento automático que se creó, luego insertar la clave externa. hacerlo al revés es como preguntar cómo sacar el automóvil de tu garaje antes de poner la llave en el encendido. – longneck

+0

No es el punto. El punto es que la pregunta era "Cómo obtener el próximo incremento automático", no "Cómo obtener la última identificación insertada". Entonces, básicamente, si la tabla está vacía, y desea saber el próximo incremento automático para crear un título de sello (ejemplo: "Stamptitle-22"). Entonces la última identificación insertada no funcionará. –

0

También puede utilizar esta función

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