suscríbete
Distribuir contenido

Una de las múltiples diferencias o novedades entre Drupal 5 y Drupal 6 es la forma de calcular el último registro insertado en una tabla de base de datos. Podemos resumirlo diciendo que en Drupal 5 no se hace de forma totalmente correcta, pero en Drupal 6 está corregido.

Drupal 5


Drupal 5
utiliza una tabla auxiliar llamada sequences para almacenar los últimos valores de los campos auto numéricos, y, en lugar de omitir el campo autonumérico para que el gestor de bases de datos se encargue de la secuencia automáticamente, se utiliza la función db_next_id, que accede a sequences y calcula y modifica el siguiente valor para la tabla.

<?php
function db_next_id($name) {
$name = db_prefix_tables($name);
db_query('LOCK TABLES {sequences} WRITE');
$id = db_result(db_query("SELECT id FROM {sequences} 
WHERE name = '%s'", $name)) + 1;
db_query("REPLACE INTO {sequences} VALUES ('%s', %d)", $name, $id);
db_query('UNLOCK TABLES');
return $id;
}
?>

Por lo que, si en algún momento necesitamos resetear o alterar la secuencia de una determinada tabla en Drupal 5, deberemos tener en cuenta que la configuración de AUTO_INCREMENT para generar autonuméricos puede que no se utilice y deberemos actualizar la tabla sequences para establecer el número que necesitemos.

Si creamos un nuevo módulo para Drupal 5, o modificamos uno que requiera añadir alguna tabla con autonuméricos, utilizando como base de datos Mysql, es mejor utilizar el campo AUTO_INCREMENT y no db_next_id.

Para insertar en una tabla con un campo AUTO_INCREMENT, deberemos no informar el campo y dejar que el gestor calcule cuál es el siguiente número.

Para recuperar el último valor insertado, no hay una función definida en la capa de abstracción de base de datos, por lo que deberemos utilizar la función de Mysql last_insert_id(). Más información sobre el funcionamiento de last_insert_id()

Drupal 6

A partir de Drupal 6, la función db_next_id queda obsoleta y en su lugar se debe utilizar db_last_insert_id que sí utiliza la secuencia automática del gestor de base de datos.

<?php
function db_last_insert_id($table, $field) {
return db_result(db_query("SELECT CURRVAL('{". db_escape_table($table) ."}_
". db_escape_table($field) ."_seq')"));
}
?>

Comentarios

te estas haciendo el amo del Dupral macho!!

de aquí a nada te linkan los de la pagina misma!!

Enviar un comentario nuevo

CAPTCHA
Esta pregunta sirve para distinguir si eres un humano o un spambot.
5 + 14 =