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.