pues al usar move_uploaded_file podés controlar con total precisión el nombre que le ponés. Por practicidad es mejor, si por ejemplo se trata de la imagen 5 del id 46, ponerle un nombre tipo 46_5.jpg.
Para obtener el id, bueno, depende de cómo estás procesando los datos, pero yo que tu buscaría en algún buscador la frase: SHOW TABLE STATUS
También podés usar una función que haga algo como esto:
1.- separás el nombre de la extensión. (digamos, en $nom y $ext)
2.- inicializás un índice en el valor que quieras ($i)
3.- comprobás, con file_exists() si el nombre de la imagen existe.
3.a .- si el archivo existe, probás formar un nombre como
$nom_$i.$ext, y vas aumentando el $i mientras exista un archivo con ese nombre
4.- cuando el nombre no exista, guardás la imagen con el último $i que te haya quedado.
Un ejemplo:
nombre: hola.jpg -> $num = 'hola', $ext = 'jpg'
si existe hola.jpg
=> mientras file_exists(hola_$i.jpg),
aumento $i
luego, tranquilamente, hacés el move_uploaded_file.
Como podrás ver, aún teniendo que usar
SHOW TABLE STATUS LIKE 'nombre_de_tabla'
para recuperar el ID 'siguiente' de la tabla, es mucho más sencillo guardar la imagen con el id que preocuparse por si la imagen existe.
De hecho, si existe una imagen anterior con el mismo nombre en este caso, de seguro querrás cambiarla por la nueva
Saludos.