Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wstawianie danych z tablic do bazy
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
misty
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!
prond
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ę.
misty
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!
MikroUser
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.