Как добавить автоматически сгенерированный буквенно-цифровой ключ в id_column

Что происходит, когда пользователь заходит на сайт, заполняет форму для создания нового продукта с полями заголовка, описания, цены и так далее...

Я хочу сохранить уникальный сгенерированный буквенно-цифровой ключ в моем столбце «id», для которого по умолчанию установлено значение auto_increment, используйте этот уникальный ключ как мой product_id. Как и каждое видео на Youtube, у него есть собственный сгенерированный уникальный ключ, а не идентификатор типа «1», «2», «3»....

Я генерирую этот ключ, используя "uniqid();"функция.

Пожалуйста, дайте мне знать, если я делаю это неправильно, или есть лучший подход для этого. Я полный новичок.

Почему вы хотите использовать как автоматически увеличивающиеся значения базы данных, так и uniqid()?

Nico Haase 24.06.2019 10:06

Нет, я просто хочу использовать сгенерированный "uniqid();" значения.

JesseJames 24.06.2019 10:09

По сути, вы лишаете столбца привилегии, когда даете ему автоинкрементный тип. Это противоречит цели быть автоматическим, если вы собираетесь присвоить какое-то значение самостоятельно.

Red Bottle 24.06.2019 10:11
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
238
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Следующие две вещи не могут быть истинными одновременно:

  • уникальный сгенерированный буквенно-цифровой ключ
  • столбец id, для которого по умолчанию установлено значение auto_increment

У вас не может быть буквенно-цифрового ключа, который является auto_increment, потому что по определению буквенно-цифровой означает строку, созданную из алфавитов и цифр, и вы не можете автоматически увеличивать алфавиты, имеет смысл?

Итак, я предлагаю вам оставить ключ «id» числовым как 1, 2, 3 и т. д. и создать еще один столбец в вашей таблице, назовите его, скажем, «unique_id». Конечно, вы можете назвать его как угодно. Он должен быть типа VARCHAR(255).

А затем заполните этот столбец, используя следующие функции:

$bytes = 12;
$uniqueId = bin2hex(openssl_random_pseudo_bytes($bytes)); //this will create 24 char alphanumeric string, you can increase or decrease it by changing the $bytes

и поместите это $uniqueId в свою колонку, и вуаля, у вас есть уникальный идентификатор объекта.

ОБНОВИТЬ

Чтобы отобразить буквенно-цифровой уникальный идентификатор в вашем URL-адресе, вам нужно изменить структуру URL-адреса с /localhost/product/product_id на /localhost/product/product_unique_id, и я предполагаю, что у вас есть где-то ваш продукт, указанный с какой-то гиперссылкой, нажав на которую пользователь переходит на страницу сведений о продукте, правильно?

Допустим, у вас есть продукт с идентификатором 1 и уникальным идентификатором lt4Zhr7, поэтому, когда вы перечисляете продукты, вы указываете уникальный идентификатор продукта следующим образом:

<a href = "/localhost/product/lt4Zhr7"> Product 1 </a>

Это базовое решение, которое должно направить вас в правильном направлении, ваш фактический код может отличаться в зависимости от используемой вами структуры или какого-либо другого фактора.

Как показать этот уникальный идентификатор в URL-адресе? Когда я создаю продукт, мой URL-адрес «/localhost/product/product_id», например, «/localhost/product/4». Я хочу, чтобы это было похоже на «/localhost/product/lt4Zhr7».

JesseJames 24.06.2019 10:15

Этот ответ следует принять. Это очень разумное решение. Уникальный идентификатор настолько близок, насколько это возможно, к действительно уникальному, даже криптографически безопасному (что выходит за рамки вопроса, но, тем не менее, хорошо), случайному. И @Learner прав. Вы не можете иметь автоинкрементную строку И в том же столбце.

Andrei 24.06.2019 10:18

Спасибо @Андрей. ОП, я обновил свой ответ, чтобы дать вам представление о том, как вы можете загрузить свой продукт, используя уникальный идентификатор.

Abhay Maurya 24.06.2019 10:42

Спасибо @Ученик. Но как добавить префикс в openssl_random_pseudo_bytes()?

JesseJames 24.06.2019 12:13

Простая конкатенация PHP? $uniqueId = 'prefix_'.bin2hex(openssl_random_pseudo_bytes($bytes)); Должно сработать?

Abhay Maurya 24.06.2019 12:28

Мой добрый сэр, @Learner, вы настоящий мужчина! И последнее, где мне обновить маршрут, чтобы показать unique_id в URL-адресе?

JesseJames 24.06.2019 12:42

Это зависит от того, где вы перенаправляете пользователей на страницу «сведения о продукте». Это зависит от структуры вашего сайта.

Abhay Maurya 24.06.2019 13:01

Пожалуйста, разместите с ним отдельный вопрос, предоставив другие подробности, относящиеся к этой конкретной проблеме, например, какую платформу вы используете, какова структура вашего веб-сайта и т. д. Этот разговор выходит за рамки первоначально заданного вопроса. Спасибо!

Abhay Maurya 24.06.2019 13:07

Другие вопросы по теме