Drupal 6: db_last_insert_id() no funciona correctamente [Solución]
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.
1 2 3 4 5 6 7 8 9 10 11 |
/** * 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:
1 2 3 4 5 6 7 8 9 10 11 12 |
/** * 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.