Пользователь введет в форме последовательность символов, по которой будет производится поиск по конкретному столбцу в базе. Если это случайное сочетание символов, то подобрать его сложно. Если это целое число с автоинкрементом, то вводи их подряд и получай записи. Разве не так?
Здесь очень трудно говорить абстрактно. Приведите, пожалуйста пример поконкретнее, тогда можно будет обсудить этот вопрос.
В целях безопасности, пользователя нужно как можно более ограничить в возможностях ввода. Это, кстати, и в его интересах. Чем меньше возможность выбора для ввода, тем легче пользователю выбрать именно то, что ему нужно. Простой пример - ввод даты. Сравните удобства ввода даты в трех случаях - текстовое поле, выбор дней, месяцев и лет из выпадающих списков и выплывающий календарь. Как будет удобнее для пользователя и безопаснее для системы? Чем меньше вариантов выбора, тем меньше головной боли у нормального пользователя, и, наоборот, больше у шаловливого пионера-недоумка.
По поводу уникального идентификатора - все предельно просто. Хэш функция md5 возвращает 32-значное шестнадцатеричное число, причем один и тот же аргумент дает один и тот же хэш, что позволяет с успехом использовать эту функцию для паролей. Обратное преобразование напрямую невозможно (кроме, конечно, тупого подбора).
А c timestamp() я немного ошибся. Простите! Функция называется time() и возвращает количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT). Достаточно уникальное число - каждую секунду - другое! Но даты следуют подряд, одна за другой. Вот md5 и устраняет этот "недостаток".
Однако, сократив хэш до 10 символов, можно нарваться на повторы.