Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в базу MySQL, либо update либо insert 
V
    Опции темы
Marlik
Дата 16.5.2009, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Здравствуйте, вот проблемка:

Код


Это параметры из формы выглядят так, присвоил переменной для ясности
my %param = (
'left_6' => '70',
'left_1' => '65',
'right_7' => '71',
'right_4' => '68',
'left_8' => '72',
 'right_6' => '70',
'right_2' => '66',
'left_5' => '69',
'left_7' => '71',
'right_8' => '72',
'right_1' => '65',
'left_3' => '67',
'left_4' => '68',
'right_5' => '69',
'right_3' => '67',
 'left_2' => '66'
);

Структура БД

id  main  left  right  guest  name  data  number

my($main, $guest, $name, $data, $number) = @row;
my($key, $value);

while(($key, $value) = (each(%param))){

if($key =~ m/right/i){

my $dbh = DBI->connect("DBI:mysql:$db:$host", $user, $passwd) || die "$!";
$dbh->do("insert into user (main, right,  guest,  name,  data,  number)  values ($main, $value,  $guest,  $name,  $data,  $number)");
 
 }else{

my $dbh = DBI->connect("DBI:mysql:$db:$host", $user, $passwd) || die "$!";
$dbh->do("insert into user ((main, left,  guest,  name,  data,  number)  values ($main, $value,  $guest,  $name,  $data,  $number)");

}

  }

 

В связи с тем что параметры не упорядочены, я соответственно перезаписываю одну строку, другой, то есть получается что в таблице либо столбик right либо столбик left будут частично пустыми, а вот как update использовать так и не пойму. Пытался делать запрос есть ли такая строка с такими параметрами в БД, и соответственно на основании этого решать либо insert либо update, чо-то не получилось. Есть у кого-нибудь нормальное решение, а то башка уже не соображает, спасибо. 


Это сообщение отредактировал(а) Marlik - 16.5.2009, 06:12
PM WWW Skype   Вверх
DEER
Дата 16.5.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: 2
Всего: 13



на вскидку
Код

my $values = qw();
while(($key, $value) = (each(%param))){
 if($key =~ /(left|right)_(\d+)$/i) {
    my $o = $values->{$2};
    $o = qw() unless $o;
    if($1 eq 'left') {
            $o->{left} = $value;
    } elsif($1 eq 'right') {
            $o->{right} = $value;
    }
    $values->{$2} = $o;
}
}

my $dbh = DBI->connect("DBI:mysql:$db:$host", $user, $passwd) || die "$!";
foreach my $key (keys %$values) {
$dbh->do("insert into user ((main, left, right,  guest,  name,  data,  number) "
      ." values ($main, ".$values->{left}||0.", ".$values->{right}||0.",  $guest,  $name,  $data,  $number)");}



Это сообщение отредактировал(а) DEER - 16.5.2009, 15:23


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
shamber
Дата 16.5.2009, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



Цитата(Marlik @  16.5.2009,  06:09 Найти цитируемый пост)
Пытался делать запрос есть ли такая строка с такими параметрами в БД, и соответственно на основании этого решать либо insert либо update, чо-то не получилось.

приведите пример того что вы делали, может и будет понятно где ошибка.
Я делал нечто подобное,(запрос строки->принятие решения) и у меня нормально работало с mysql.
PM MAIL Jabber   Вверх
Marlik
Дата 18.5.2009, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



DEER, дружище по моему ты все усложнил, мне кажется можно проще, тем более что не работает, наверное попробую сделать выборку, shamber, запрос делал так:

Код

my $c = DBI->connect("DBI:mysql:$db:$db_serv", $user, $passwd, {RaiseError=>1, AutoCommit=>0}) || die "$!";
my $statement = "select name from $table where number = $number";
my $sth = $dbh -> prepare($statement) or die "Не  могу  подготовить $statement: $dbh -> errstr\n";
my $rv = $sth -> execute or die "Не могу выполнить: $sth -> errstr";

my $rezult = $sth -> fetchrow_array;

if($rezult){
...
}else{
...
}


Ну это все приблизительно, таблица на самом деле другая, для ясности код переделывал. Спасибо.
PM WWW Skype   Вверх
Marlik
Дата 18.5.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Вопрос решен, Всем спасибо за участие. Ошибок как логических так и синтаксических море, заработался видать. 

Цитата(Marlik @  18.5.2009,  00:37 Найти цитируемый пост)

my $statement = "select name from $table where number = $number";
my $sth = $dbh -> prepare($statement) or die "Не  могу  подготовить $statement: $dbh -> errstr\n";
my $rv = $sth -> execute or die "Не могу выполнить: $sth -> errstr";
my $rezult = $sth -> fetchrow_array;

 

Вот отседа даже видно что переменной $statement без проблем присвоится выражение "select name from $table where number = $number" несмотря на пробелы вокруг "=", а вот такое выражение уже не пролезло $dbh -> prepare или $sth -> execute или $sth -> fetchrow_array, так как там пробелы вокруг "->". Ну и оголтелое копирование кусков кода туда сюда, то-же к хорошему не привело.

PM WWW Skype   Вверх
Marlik
Дата 20.4.2011, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Привет Всем, что-бы не мутить новую тему отпишусь здесь-же. Вот кусок кода:

Код

my $dbh = DBI->connect("DBI:mysql:$db:$host", $user, $passwd) || die "$!";
my $sth=$dbh->prepare("select id_user, id_summ, id_summ_prognoz from mt_summ_of_rezult where id_user=$author_id");
$sth->execute;

my($id_user, $summ, $summ_prognoz) = $sth->fetchrow();

$sth->finish;
$dbh->disconnect;

if($id_user ){

print "Нет в базе<br>";

}else{

print "Есть в базе<br>";

}


Проблема в том что таблица пустая, а прога говорит что в $id_user, какое-то значение определяемое как истина. Куда рыть, где засада? Спасибо.


Это сообщение отредактировал(а) Marlik - 20.4.2011, 16:11
PM WWW Skype   Вверх
Pfailed
Дата 20.4.2011, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Может наоборот?
Код

if($id_user ){
print "Есть в базе<br>";
}



--------------------
PM MAIL   Вверх
Marlik
Дата 20.4.2011, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Цитата(Pfailed @ 20.4.2011,  16:27)
Может наоборот?
Код

if($id_user ){
print "Есть в базе<br>";
}

Ну да извиняюсь, именно так.
PM WWW Skype   Вверх
JackYF
Дата 21.4.2011, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(Marlik @  20.4.2011,  15:09 Найти цитируемый пост)
Привет Всем, что-бы не мутить новую тему отпишусь здесь-же.


Модератор: Пожалуйста, один топик - один вопрос.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0774 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.