Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]dziwne zachowanie bazy danych
maraska
post
Post #1





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

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


Mam takie proste dwa zapytania jak poniżej (wyciągnięcie danych z jednej tabeli i zapis do drugiej).

  1. $sql = mysql_query("SELECT * FROM wizytowka WHERE wizytowkaID = '$control'");
  2. while($c = mysql_fetch_array($sql)) {
  3.  
  4. $wizytowkaID = $c['wizytowkaID'];
  5. $nazwa_firmy = $c['nazwa_firmy'];
  6. $nr_domu = $c['nr_domu'];
  7. $ulica = $c['ulica'];
  8. $nr_lokalu = $c['nr_lokalu'];
  9. $kod_pocztowy = $c['kod_pocztowy'];
  10. $NIP = $c['NIP'];
  11. $miejscowosc = $c['miejscowosc'];
  12.  
  13. $sgl1 = mysql_query("INSERT INTO inne_dane SET data=NOW(), kb='$kb', kn='$kn', wizytowkaID='$wizytowkaID', nazwa_firmy='$nazwa_firmy', nr_domu='$nr_domu', ulica='$ulica', nr_lokalu='$nr_lokalu', kod_pocztowy='$kod_pocztowy', NIP='$NIP', miejscowosc='$miejscowosc', zaco='Text'");
  14.  


I teraz, jeżeli w drugim zapytaniu zamienię $wizytowkaID na twardo na dowolny ciąg znaków/liczbę, to zapisuje się wszystko pięknie.

Jeżeli jednak ta liczba wpisana na twardo = liczbie którą przekazuje zmienna $wizytowkaID z pierwszego zapytania, to zapisuje się tylko $wizytowkaID i te pola, których wartości (zmienne) są generowane poza pierwszym zapytaniem.

Jeżeli w tym zapytaniu jest wizytowkaID=$wizytowkaID to jak powyżej, czyli tylko $wizytowkaID i te pola, których wartości (zmienne) są generowane poza pierwszym zapytaniem.



Wszystkie wartości zmiennych wywołane echo po pierwszym zapytaniu pokazują się prawidłowo.

Wie ktoś o co chodzi?

Ten post edytował maraska 30.04.2013, 11:46:54
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Na początek to całe zapytanie załatwiasz składnią INSERT INTO ... SELECT. Posprzątaj to trochę jakimś spintf.


--------------------
Go to the top of the page
+Quote Post
maraska
post
Post #3





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

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


Jak było w może bardziej czytelnym formacie

INSERT INTO `nazwa_tabeli` (`nazwa_kolumny1`,`nazwa_kolumny2`)
VALUES ('wartość','wartość2')

efekt ten sam
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Raczej chodzi o to, żebyś wyeliminował ryzyko wystąpienia błędu, zwolnił pamięć i odciążył serwer BD.
Przykład użycia: http://stackoverflow.com/questions/5907206...-default-values
Poza tym nigdzie nie wiedzę obsługi błędów dla tych zapytań.


--------------------
Go to the top of the page
+Quote Post
in5ane
post
Post #5





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Spróbuj w ten sposób:
  1. INSERT INTO inne_dane (DATA, kb, kn, wizytowkaID, nazwa_firmy, nr_domu, ulica, nr_lokalu, kod_pocztowy, NIP, miejscowosc, zaco) SELECT now(), $kb, $kn, wizytowkaID, nazwa_firmy, nr_domu, ulica, nr_lokalu, kod_pocztowy, NIP, miejscowosc, 'Text' FROM courses WHERE wizytowka = '$control'

Jednakże, nie mam 100% pewności jak się zachowają zmienne i to now() przy tym SELECT'cie, ale spróbuj, może zadziała, a jak nie to ktoś mnie delikatnie poprawi.


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
maraska
post
Post #6





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

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


Cytat(viking @ 30.04.2013, 12:56:31 ) *
Raczej chodzi o to, żebyś wyeliminował ryzyko wystąpienia błędu, zwolnił pamięć i odciążył serwer BD.
Przykład użycia: http://stackoverflow.com/questions/5907206...-default-values
Poza tym nigdzie nie wiedzę obsługi błędów dla tych zapytań.


echo mysql_errno() . ": " . mysql_error() . "\n";
if($sql1) echo "Dane zostały dodane poprawnie";
else echo "Błąd nie udało się dodać nowego rekordu";

Wynik:
0: Dane zostały dodane poprawnie

I nie dodało jak powinno sad.gif

Cytat(in5ane @ 30.04.2013, 13:40:50 ) *
Spróbuj w ten sposób:
  1. INSERT INTO inne_dane (DATA, kb, kn, wizytowkaID, nazwa_firmy, nr_domu, ulica, nr_lokalu, kod_pocztowy, NIP, miejscowosc, zaco) SELECT now(), $kb, $kn, wizytowkaID, nazwa_firmy, nr_domu, ulica, nr_lokalu, kod_pocztowy, NIP, miejscowosc, 'Text' FROM courses WHERE wizytowka = '$control'

Jednakże, nie mam 100% pewności jak się zachowają zmienne i to now() przy tym SELECT'cie, ale spróbuj, może zadziała, a jak nie to ktoś mnie delikatnie poprawi.


FROM courses WHERE wizytowka = '$control' ?

Miałeś na myśli:
FROM wizytowka WHERE wizytowkaID = '$control' ?

Cytat(maraska @ 30.04.2013, 14:03:39 ) *
echo mysql_errno() . ": " . mysql_error() . "\n";
if($sql1) echo "Dane zostały dodane poprawnie";
else echo "Błąd nie udało się dodać nowego rekordu";

Wynik:
0: Dane zostały dodane poprawnie

I nie dodało jak powinno sad.gif



FROM courses WHERE wizytowka = '$control' ?

Miałeś na myśli:
FROM wizytowka WHERE wizytowkaID = '$control' ?


Wynik:

1136: Column count doesn't match value count at row 1 Błąd nie udało się dodać nowego rekordu
Go to the top of the page
+Quote Post
viking
post
Post #7





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Jak widzisz z komunikatu nie zgadza się liczba kolumn z wartościami. Innymi słowy 11<>12.


--------------------
Go to the top of the page
+Quote Post
maraska
post
Post #8





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

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


Zgadzać się zgadza tylko problemem jest pewnie now() do podstawienia za datę w tym zapytaniu.
To zresztą sygnalizował in5ane
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Więc jaki dostajesz komunikat błędu po poprawieniu?


--------------------
Go to the top of the page
+Quote Post
maraska
post
Post #10





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

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


Nic nie poprawiałem. Policzyłem i się zgadza, jest po dwanaście WLICZAJĄC wartość now(), której chyba to zapytanie nie obsługuje
Go to the top of the page
+Quote Post
in5ane
post
Post #11





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Cytat(maraska @ 30.04.2013, 14:52:00 ) *
Nic nie poprawiałem. Policzyłem i się zgadza, jest po dwanaście WLICZAJĄC wartość now(), której chyba to zapytanie nie obsługuje

Zrób sobie:
$czas = now()
i dodaj do zapytania zmienna $czas ;-)


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
maraska
post
Post #12





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

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


Po wstawieniu funkcji czasu i wzięcia zmiennych w ' ' działa.

Chociaż dziwnie, bo w phpmyadmin dalej jest źle (brak pobranych danych) a strona X, która przechwytuje w tym samym czasie (następnie) do formularza dane właśnie z tej insertowanej tabeli, wyświetla wszystkie dane.

Jak to możliwe? Nie mam zielonego pojęcia.

W każdym razie ponieważ formularz na stronie X skutecznie updatuje tabelę ręką człowieka (a po to to robię) zostawiam jak jest i zamykam temat.

Chyba, żeby ktoś wiedział, czemu w phpmyadmin pola w tabeli są puste, a formularz je odczytał
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: 19.08.2025 - 21:45