Помощник
|
Обработка уникальных полей в MySQL |
Banderas
|
Сообщение
#1
|
||
|
|
||
|
|||
sc2r2bey |
13.3.2011, 12:19;
Ответить: sc2r2bey
Сообщение
#2
|
|
а зачем вытягивать? ты просто формируешь запрос с условием в котором отображены введенные пользователем данные и есть запись с таким значением есть сообщаешь, что такой уже есть, пусть введет новые.
-------------------- программирую web и для we |
|
|
Banderas
|
Сообщение
#3
|
|
Я так и делаю. Просто mysql не выдает ошибки если есть одинаковые поля. Тоесть передает значение true. Если true значит все впорядке и я работаю далее... Как узнать что данный пользователь уже есть в базе? Может mysql_error()?
Вот мой запрос [php]$add_user = mysql_query("INSERT INTO users (login, password, name, mail, sex, address, phone, date, auth_code) VALUES ('$login', '$password', '$name', '$mail', '$sex', '$address', '$phone', '$date', '$auth_code')", $db); $add_user ? print('good') : print('bad');[/php] |
|
|
matroskin8 |
13.3.2011, 12:36;
Ответить: matroskin8
Сообщение
#4
|
|
Можно использовать ф-цию mysql_affected_rows(), которая возвращает количество рядов затронутых запросом по модификации таблицы. После запроса на добавление данных в таблицу (INSERT) достаточно проверить изменилось ли что-то в таблице после запроса, т.е., добавились ли новые данные:
[php]if (mysql_affected_rows() > 0) echo "<p>Данные внесены!</p>"; else echo "<p>Не внесены - возможно, такие данные уже есть!</p>";[/php] |
|
|
ZiTosS |
13.3.2011, 13:02;
Ответить: ZiTosS
Сообщение
#5
|
|
Banderas, конечно лишние запросы к БД ни к чему, но всё же вы данные не будете вытаскивать, ты просто проверишь на существование логин ИЛИ email ИЛИ телефон. Далее mysql_num_rows().
Никогда не использовал на практике mysql_affected_rows() - может лучше именно так и делать. Два запроса против одного. Сколько движков не смотрел, все проверяют данные перед занесением с помощью предварительного SELECT запроса: IPB2, DLE, Joomla... |
|
|
gaaarfild |
13.3.2011, 20:13;
Ответить: gaaarfild
Сообщение
#6
|
|
Единственное, что если ограничение идет по UNIQUE, то mysql_affected_rows() может вернуть больше 0. Потому что я точно знаю, когда идет операция REPLACE, то он возвращает при замене одной строки - 2. Один на удаление и второй на добавление. Так что стоит быть осторожнее.
А еще лучше, проверять свободность при вводе логина с помощью AJAX. |
|
|
ZiTosS |
14.3.2011, 21:50;
Ответить: ZiTosS
Сообщение
#7
|
|
gaaarfild, это ты хорошо подметил. Только при INSERT запись вставляется, если значение UNIQUE-поля уникально. А REPLACE - замена
Мне вот только интересно, при REPLACE возможно ли сделать значения уникального поля неуникальными или здесь тот же самый принцип, что и при вставке (INSERT). |
|
|
Banderas
|
Сообщение
#8
|
|
Нашел решение, вот такое простое
[php]$unique_mail = mysql_query("SELECT COUNT(id) FROM users WHERE mail='".mysql_real_escape_string($mail)."'"); if (mysql_result($unique_mail, 0) > 0) { die('Такоей имейл уже существует в нашей БД'); }[/php] Возник вопрос, можно ли проверять 2 или 3 поля? что бы не писать [php]$unique = mysql_query("SELECT COUNT(id) FROM users WHERE login='".mysql_real_escape_string($login)."'"); print_r(mysql_fetch_array($unique)); if(mysql_result($unique, 0) > 0) { die('Пользователь с таким именем существует!'); } $unique_mail = mysql_query("SELECT COUNT(id) FROM users WHERE mail='".mysql_real_escape_string($mail)."'"); if (mysql_result($unique_mail, 0) > 0) { die('Такоей имейл уже существует в нашей БД'); }[/php] |
|
|
sc2r2bey |
19.3.2011, 15:10;
Ответить: sc2r2bey
Сообщение
#9
|
|
ну да, сделай WHERE условие1 AND условие2 и т.д.
-------------------- программирую web и для we |
|
|
ZiTosS |
22.3.2011, 20:29;
Ответить: ZiTosS
Сообщение
#10
|
|
|
surfer, +1
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery Разработка сайтов и сервисов под-ключ |
0 | alexey | 1174 | 24.11.2023, 14:46 автор: alexey |
|
pocket-exchange.com - обмен электронных валют. Низкие курсы! Быстрая обработка заявок! | 8 | pocket_exchange | 9303 | 12.8.2022, 15:30 автор: pocket_exchange |
|
10000 уникальных статей из вебархива всего за 25500 рублей! Под заказ, уникальность 90-100% |
1 | bposter94 | 2553 | 12.2.2022, 15:22 автор: SanekBug |
|
Proxylist4you.com - 2.000.000 уникальных IP в месяц. Приватные прокси http\https\socks4\socks5. GEO пулы Чистые и быстрые прокси. Residential Backconnect Rotating Proxies |
40 | proxylist4you | 29953 | 8.11.2021, 14:34 автор: proxylist4you |
|
Сотрудничество и качественная обработка трафика | 4 | BNRKmaster | 882 | 12.6.2021, 13:02 автор: NormanSky |
Текстовая версия | Сейчас: 29.3.2024, 18:06 |