Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wstawianie danych z tablic do bazy
misty
post
Post #1





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

Ostrzeżenie: (0%)
-----


witam, mam taki dziwny problem.. ale zaczne od poczatku by wyjasnic dokladnie o co chodzi.
wiec tak:
uzytkownik ma formularz w ktorym moze dodawac dane. dwie opcje w tym formularzu moga byc dodawane wieloktronie (np. uzytkownik wybiera z listy rozwijanej/wpisuje w oknie wina 'czerowne', klika dodaj-pojawia mu sie to na dole w tabeli, wpisuje 'biale' klika 'dodaj' i w tabeli na dole ma juz dwa rodzaje wina). gdy juz doda tyle wartosci ile chce moze je wrzucic do bazy. dane z okien przy ktorych mozna dodawac wieloktronie, sa trzymane w tablicach sesyjnych.
przedstawie fragment kodu:
  1. <?php
  2. $tablica_jeden=$_SESSION['cc']; //tu sie znaduje rozne dane, np. rodzaje win (biale, czerwone, etc)
  3.  $tablica_dwa=$_SESSION['bb']; //tu sa jakies inne dane, rowniez w liczbie mnogiej
  4.  
  5.  $values=''; 
  6.  for($i=0; $i<count($tablica_jeden); $i++) 
  7.  { 
  8.  $values .="(1,'{$tablica_jeden[$i]}','{$tablica_dwa[$i]}'),"; 
  9.  } 
  10.  
  11.  
  12.  $zapytanie02="insert into tabela (wartosc_stala, kolumna_jeden,kolumna_dwa) values$values"; 
  13.  $zapytanie02=substr($zapytanie02,0,strlen($zapytanie02)-1).';'; 
  14.  $wynik02=pg_query($polaczenie, $zapytanie02); 
  15.  echo "Dane zostaly wprowadzone do bazy!";
  16. ?>


ladnie mi to dziala i bez problemow, mam u siebie postgresa 8. jednak skrypt ten musze umiescic na innym serwerze. i tam, w momencie gdy tablice $_SESSION['bb'] i $_SESSION['cc'] zawieraja wiecej niz jedna dana pojawia mi sie blad:
Cytat
Warning: pg_query() [function.pg-query]: Query failed: ERROR: syntax error at or near ","

jak wyswietle sobie zapytanie to otrzymam:
Cytat
insert into tabela (wartosc_stala, kolumna_jeden, kolumna_dwa) values(1,'1','123'),(1,'2','454564'),(1,'4','444');


nie mam pojecia czemu na tamtym serwerze tak sie dzieje.. u mnie sie nic nie krzaczy.. czy moze to byc wina starszej wersji postgresa na tamtym serwerze?
oraz czy ktos z Was zna jakies alternatywne rozwiazanie by chodzilo to rowniez tam?
z gory dzieki za sugestie!
pzdr!
Go to the top of the page
+Quote Post
prond
post
Post #2





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Nie pamiętam od której wersji można używać składni, którą zastosowałeś. Na pewno wcześniej jej w PostgreSQL nie było.

Rozwiązanie może być np. takie :

  1. INSERT INTO tabela (wartosc_stala, kolumna_jeden, kolumna_dwa)
  2. SELECT 1,'1','123'
  3. UNION
  4. SELECT 1,'2','454564'
  5. UNION
  6. SELECT 1,'4','444';


Ewentualnie podziel to na osobne inserty i zapakuj w jedna transakcję.


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
Go to the top of the page
+Quote Post
misty
post
Post #3





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

Ostrzeżenie: (0%)
-----


spoko, dalam juz rade.
mam to w ten sposob:
  1. <?php
  2. $tablica_jeden=$_SESSION['cc']; 
  3.  $tablica_dwa=$_SESSION['bb']; 
  4.  
  5.  for ($i=0; $i<count($tablica_jeden); $i++) 
  6.  { 
  7.  $zapytanie="insert into tabela (wartosc_stala, kolumna_jeden,kolumna_dwa ) values ('1', '$tablica_jeden[$i]', '$tablica_dwa[$i]');"; 
  8.  $wynik=pg_query($polacznie, $zapytanie); 
  9.  }
  10. ?>


i jest si:)
tak czy siak, dzieki za sugestie!:) pzdr!
Go to the top of the page
+Quote Post
MikroUser
post
Post #4





Grupa: Zarejestrowani
Postów: 55
Pomógł: 1
Dołączył: 5.09.2006

Ostrzeżenie: (0%)
-----


Witam,

nie czepiam się, tylko dzielę się swoim doświadczeniem: winksmiley.jpg

1)
  1. <?php
  2. for ($i=0; $i<count($tablica_jeden); $i++)
  3. ?>


za każdym razem jak się wchodzi do warunku pętli for, wykonuje się metoda count! Nie jest to optymalne.

2)
  1. <?php
  2. for ($i=0; $i<count($tablica_jeden); $i++) 
  3.  { 
  4.  $zapytanie="insert into tabela (wartosc_stala, kolumna_jeden,kolumna_dwa ) values ('1', '$tablica_jeden[$i]', '$tablica_dwa[$i]');"; 
  5.  $wynik=pg_query($polacznie, $zapytanie); 
  6.  }
  7. ?>


za każdą iteracją przesyłasz do bazy nowy insert. Non-stop są przesyłane dane php->baza->php w każdej iteracji.
Zbuduj sobie $zapytanie gdzie będziesz mieć wszystkie inserty i tylko jeden raz wykonaj $wynik=pg_query($polacznie, $zapytanie);

Pozdrawiam.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 04:05