Es curioso como un error de este tipo se les llega a escapar y entra en producción.
¿Por qué no funciona? porque a algun iluminado se le ocurrio que solo lanzando la query ‘SELECT LAST_INSERT_ID()’ sin especificar la tabla sobre la que se quiere obtener el ultimo registro insertado Drupal iba automagicamente a obtenerlo…. ERROR. Ah y por cierto incluso la query ‘SELECT LAST_INSERT_ID()’ bien armada también suele fallar.
/**
* Returns the last insert id.
*
* @param $table
* The name of the table you inserted into.
* @param $field
* The name of the autoincrement field.
*/
function db_last_insert_id($table, $field){
return db_result(db_query('SELECT LAST_INSERT_ID()'));
}
La función que soluciona este problema es esta:
/**
* Version modificada del analogo de drupal que soluciona un problema comentado en foros.
*
* @param string $table tabla sobre la que se quiere obtener el ultimo id insertado
* @param string $field cual es la columna que tiene el id
* @return int
*/
function custom_db_last_insert_id($table, $field) {
$result = db_query("SELECT $field FROM {$table} ORDER BY $field DESC LIMIT 1");
$row = db_fetch_object($result);
return $row->$field;
}
Solo resta agregar que uso esta solución hace mas de un año y funciona bien.