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')"));
}
?>

3 comentarios, puedes participar usando el formulario de abajo

te estas haciendo el amo del Dupral macho!!

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

Hola
no consigo instalar drupal 6, creo que el problema es que no he creado las tablas necesarias, porque me da Warnings de Tablas que no existen, pero es que no encuentro qué tablas tengo que crear en la base de datos... sabeis cómo hacerlo? saludos

Hola María, sin saber exactamente cómo lo has instalado ni los errores que te salen, es complicado darte indicaciones, para instalar drupal, puedes seguir estos pasos de drupal hispano: http://drupal.org.es/manuales/instalacion
Si haciéndolo de este modo te sigue dando errores, dime cuáles y le echo un vistazo

un saludo

Enviar un comentario nuevo

CAPTCHA
Esta pregunta sirve para distinguir si eres un humano o un spambot.
1 + 18 =
0esuelve esta operación e introduce el resultado, por ejemplo, para 1+3, introduce 4
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato