Сверка совпадений в БД MySql.
Мне нужно сделать регистрацию через БД (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){................
Что не так :-? :-? :-?
Может есть другой, более рациональный способ решения данной задачи :-?
Народ, помогите!!!
Мне нужно сделать регистрацию через БД (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 = "Это имя уже занято";
Я не очень в перли но суть такова: Делаешь скуэль запрос: 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 = "Это имя уже занято";
Понимаешь в чем проблема: идея понятна, чего-то не пашет только :(...
Народ, помогите!!!
Мне нужно сделать регистрацию через БД (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. Подозрение что в оригинале синтаксис запроса неверен. [а может и верен ;)=]
$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
Вот в чем глюк!
Как исправить??? Может быть поиском по шаблону заменить что-то так, чтобы собачка не рассматривалась как массив??????????
Perl не рассматривает @ как массив. Просто у меня данные не добавлялись в БД (ошибка была синтаксическая), поэтому совпадений никогда бы не было...
А я в таблице посмотрел, а она пустая, как барабан :)...