Obtener la última ID insertada en una tabla con Autoincrement para MySQL

Hay ocasiones en las que queremos obtener la última ID insertada en una tabla la cual hemos especificado con Autoincrement, ya sea para para insertarla en otra tabla (una relación) o por ejemplo para generar un link dinámicamente (pagina.php?articulo=123). En ciertas circunstancias bastaría con un simple “Select ID From Tabla1 Where CampoUnico=ValorInsertado” donde CampoUnico podría ser Email o Nombre de usuario. Pero ¿qué pasa si la tabla en cuestión no tiene campos con valores únicos?

Bueno por esta razón lo más recomendable es usar LAST_INSERT_ID(), un método (como su nombre lo indica) que nos regresa la última ID insertada en nuestra tabla para un campo Autoincrement. Su objetivo vendría siendo el mismo que @@identity de Microsoft SQL Server.

LAST_INSERT_ID vs MAX(id)

Investigando un poco por internet nos podemos topar con otro método (Muy malo para la situación que tenemos planteada hoy) el cual consiste en seleccionar la ID de valor más alto “Select MAX(id) From tabla1” y digo malo porque si otro usuario inserto un nuevo registro, nuestro Select nos podría regresar la ID de alguien más. A diferencia de LAST_INSERT_ID que le regresa el valor deseado a cada Conexión.

Código

Bueno aquí esta lo que seguramente les interesa, un ejemplo:

INSERT INTO Tabla1(Titulo) VALUES(«dddd»);
SELECT LAST_INSERT_ID();

Caso especial

Hay un caso un poco raro en el que LAST_INSERT_ID podría no funcionar. Cuando estaba haciendo este post y quise probar el código en otro archivo .php apareció algo muy raro, en uno no funcionaba el LAST_INSERT_ID y en el otro archivo si (aclaro, no era problemas de conexión o algo por el estilo por que las otras consultas, como Insert, si funcionaban). En ambos archivos llamaba al mismo StoredProcedure (sin parámetros), de modo que el problema no era tanto de código SQL. Googleando un poco nos podemos dar cuenta de que esto le a pasado a más de uno, si este es tu caso, la solución es muy sencilla: Asigna el valor de LAST_INSERT_ID a una variable. A continuación el ejemplo:

DECLARE IdUltima INT;
INSERT INTO Tabla1(Titulo) VALUES(«dddd»);
SET IdUltima = -1;
SELECT LAST_INSERT_ID() INTO IdUltima;
SELECT IdUltima;

Sumar días, meses, años a una fecha en PHP

La forma más sencilla es la siguiente, solo toma una línea de código y ya.

echo date(«m/d/Y», strtotime(«09/17/2011 +1 month»));

También podemos hacerlo si tenemos la fecha en una variable.

$Fecha = «09/17/2011»;
echo date(«m/d/Y», strtotime(«$Fecha +1 month»));

Para sumarle a la fecha del sistema sería similar.

echo date(«m/d/Y», strtotime(date(«m/d/Y»).» +1 month»));

Incluso podemos sumar días, semanas, horas, etc.

//http://php.net/manual/es/function.strtotime.php
echo strtotime(«now»), «\n»;
echo strtotime(«10 September 2000»), «\n»;
echo strtotime(«+1 day»), «\n»;
echo strtotime(«+1 week»), «\n»;
echo strtotime(«+1 week 2 days 4 hours 2 seconds»), «\n»;
echo strtotime(«next Thursday»), «\n»;
echo strtotime(«last Monday»), «\n»;

Incluyendo ficheros Javascript bajo demanda (includes)

El código

El código para implementar la función resulta sumamente sencillo:

function loadScript(url, callback) {
  var script = document.createElement('script');

  if (script.readyState) { // IE
    script.onreadystatechange = function () {
      if (script.readyState === 'loaded' || script.readyState === 'complete') {
        script.onreadystatechange = null;
        callback();
      }
    };
  } else { // Others
    script.onload = function() {
      callback();
    };
  }

  script.src = url;
  document.getElementsByTagName('head')[0].appendChild(script);
}

Como podemos observar, solo tenemos que hacer la distinción entre navegadores ya clásica: Explorer por un lado y todos los demás por otro.

La mágia de este snippet es añadir de forma dinámica una nueva etiqueta script a la cabecera de nuestra página (el head) con la dirección URL del recurso a cargar. De forma adicional, incluimos un callback al estilo jQuery que se ejecutará tan pronto como nuestro nuevo script esté disponible.

NOTA: Para aquellos que gusten de añadir los script al final de sus páginas buscando la carga asíncrona de los componentes y demás, sólo tienen que cambiar el TagName ‘head’ por ‘body’.

Ejemplo de uso

Probemos nuestra función cargando la última versión de jQuery desde el CDN de Google:

var myLibrary = 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js';

loadScript(myLibrary, function(){
  alert('jQuery is ready!');
});

Si ejecutamos el código anterior, en cuanto el script se cargue y esté disponible, recibiremos el alert definido en el callback avisando de ello.

Conclusión

Pues poco más que añadir: un pequeño código homemade que puede resultar muy útil para importar nuestros recursos Javascript en tiempo de ejecución según vayan siendo necesarios para el desarrollo de nuestra aplicación.