Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сверка совпадений в БД MySql.

410
18 октября 2002 года
Tavix
70 / / 20.05.2000
Народ, помогите!!!
Мне нужно сделать регистрацию через БД (Perl), причем там не может быть два одинаковый логина. Я делаю так: соединяюсь с базой, ищу совпадение в нужной колонке, если оно найдено, то выдаю сообщение об ошибке. Вот так это выглядит:
$dbh = DBI->connect("DBI:mysql:$database:$hostname",$user,$password);
$sth = $dbh->prepare ("select * from book where login like '%$FORM{'login'}%'");
$sth->execute();
$lgn = $sth->rows();
$sth->finish;
$dbh->disconnect;
if ($lgn>0){................
Что не так :-? :-? :-?
Может есть другой, более рациональный способ решения данной задачи :-?
250
18 октября 2002 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by Tavix
Народ, помогите!!!
Мне нужно сделать регистрацию через БД (Perl), причем там не может быть два одинаковый логина. Я делаю так: соединяюсь с базой, ищу совпадение в нужной колонке, если оно найдено, то выдаю сообщение об ошибке. Вот так это выглядит:
$dbh = DBI->connect("DBI:mysql:$database:$hostname",$user,$password);
$sth = $dbh->prepare ("select * from book where login like '%$FORM{'login'}%'");
$sth->execute();
$lgn = $sth->rows();
$sth->finish;
$dbh->disconnect;
if ($lgn>0){................
Что не так :-? :-? :-?
Может есть другой, более рациональный способ решения данной задачи :-?



Я не очень в перли но суть такова: Делаешь скуэль запрос: SELECT * FROM $table WHERE login='$login'
И если есть хоть одна запись то, говоришь что логин занят..
На пхп это так:
$user_result = mysql_query("SELECT * FROM $table WHERE login='$login'");
if (mysql_error()) die(mysql_error());
elseif (@mysql_num_rows($user_result) == 1)
$error = "Это имя уже занято";

410
18 октября 2002 года
Tavix
70 / / 20.05.2000
Цитата:
Originally posted by Joker


Я не очень в перли но суть такова: Делаешь скуэль запрос: SELECT * FROM $table WHERE login='$login'
И если есть хоть одна запись то, говоришь что логин занят..
На пхп это так:
$user_result = mysql_query("SELECT * FROM $table WHERE login='$login'");
if (mysql_error()) die(mysql_error());
elseif (@mysql_num_rows($user_result) == 1)
$error = "Это имя уже занято";


Понимаешь в чем проблема: идея понятна, чего-то не пашет только :(...

300
18 октября 2002 года
ReDrum
689 / / 20.04.2000
Цитата:
Originally posted by Tavix
Народ, помогите!!!
Мне нужно сделать регистрацию через БД (Perl), причем там не может быть два одинаковый логина. Я делаю так: соединяюсь с базой, ищу совпадение в нужной колонке, если оно найдено, то выдаю сообщение об ошибке. Вот так это выглядит:
$dbh = DBI->connect("DBI:mysql:$database:$hostname",$user,$password);
$sth = $dbh->prepare ("select * from book where login like '%$FORM{'login'}%'");
$sth->execute();
$lgn = $sth->rows();
$sth->finish;
$dbh->disconnect;
if ($lgn>0){................
Что не так :-? :-? :-?
Может есть другой, более рациональный способ решения данной задачи :-?



1. Навести уникальный индекс на поле логина
вставлять инфу об юзере аля так
=cut=
Подсоединение к БД
=cut=
my $sth = $dbh->prepare("inser into $table values (?, ?, ? etc)")
return -1 if (!$sth);
return -2 if (!$sth->execute([параметры]))
return $dbh->{'mysql_insertid'};

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

По поводу приведенного запроса
"select * from book where login like '%$FORM{'login'}%'"
1. что будет если в бд содержится логгин vasia_pupkin и пытаются вставить vasia?!
2. Подозрение что в оригинале синтаксис запроса неверен. [а может и верен ;)=]

410
22 октября 2002 года
Tavix
70 / / 20.05.2000
Вот смотри, делаем так:
$dbh = DBI->connect("DBI:mysql:$database:$hostname",$user,$password);
$sth = $dbh->prepare ("select * from book where email='$FORM{'email'}'");
$sth->execute();
$i=$sth->rows();
$sth->finish;
А потом работаем с $i...
НО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Когда я данные выбираю, perl рассматривает @ как массив, и превращает [email]tavix@ngs.ru[/email] в tavix.ru
Вот в чем глюк!
Как исправить??? Может быть поиском по шаблону заменить что-то так, чтобы собачка не рассматривалась как массив??????????
410
22 октября 2002 года
Tavix
70 / / 20.05.2000
Народ! Я был не прав... :(
Perl не рассматривает @ как массив. Просто у меня данные не добавлялись в БД (ошибка была синтаксическая), поэтому совпадений никогда бы не было...
А я в таблице посмотрел, а она пустая, как барабан :)...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог