2012-04-29 23 views
5

¿Me pregunto cuál es la mejor solución para obtener la última ID insertada después de una consulta de mysql?La mejor manera de encontrar la última ID insertada en mysql usando php

he encontrado las siguientes soluciones:

<?php 
function get_current_insert_id($table) 
{ 
    $q = "SELECT LAST_INSERT_ID() FROM $table"; 
    return mysql_num_rows(mysql_query($q)) + 1; 
} 
?> 

o incluso utilizando mysql_insert_id función de php, pero parece que esta función no funcionará bien con BIGINT (eso es lo que estoy utilizando para el campo ID) y si hay un montón de consultas sql consecutivas podría no ser confiable.

¿Alguien podría proporcionar una solución confiable y rápida para lograr esta tarea?

+1

Ese es un uso no válido de LAST_INSERT_ID() allí. Lo recuperarías como una columna normal. mysql_num_rows() siempre será uno para esa consulta. – Corbin

+0

Encontré esa función en php.net y el póster afirmó que esta función resuelve todos los problemas causados ​​por 'mysql_insert_id'! –

+1

-1 para hacer la pregunta en lugar de leer el manual –

Respuesta

10
+0

Bueno, esa es mi pregunta, ¿cómo reaccionaría cuando hay muchas conexiones sql consecutivas y muchas consultas sql ejecutándose? –

+1

@AhouraGhotbi: ['LAST_INSERT_ID()'] (http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-insert-id) es por conexión. – eggyal

+0

Creo que vincular a la documentación sería mejor que una publicación aleatoria en el foro sin citas (http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id). Pero, es correcto, y la nota mysql_pconnect es una buena nota. – Corbin

4

Si inserta varias filas utilizando una única instrucción INSERT, LAST_INSERT_ID() devuelve el valor generado por sólo la primera fila insertada. La razón para esto es permitir reproducir fácilmente la misma instrucción INSERT contra otro servidor.

+3

Si va a copiar/pegar algo de la documentación, debe citarlo. – Corbin

Cuestiones relacionadas