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')"));
}
?>
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
relacionadas
nube de tags
qué se comenta
- Seguramente con por pedro (3julio2009)
- esto es lo que iba entre las por michelangelo (3julio2009)
- buenas!!! o no por michelangelo (3julio2009)
- Creo que se te ha ido la mano por pedro (2julio2009)
- Sería bueno que agregaras por makuaka (2julio2009)
- hi por makuaka (2julio2009)
- Hola como estan, acabo de por 4jotas (2julio2009)
desde twitter
de Poker
vienen de fuera
- desde Próxima Drupalada el 10 de Junio | Blog de Carlos Rincón (3junio2009)
- desde Nueva etapa en Neurotic | Jordi Bufí (1junio2009)
- desde Sant Jordi, día del libro en Cataluña, listado completo de a (22abril2009)
- desde Conclusiones de la segunda Drupalada | Blog de Carlos Rincón (2abril2009)
- desde Atenea tech - Blog &raquo; Blog Archive &raquo; Segu (1abril2009)





te estas haciendo el amo del Dupral macho!!
de aquí a nada te linkan los de la pagina misma!!