Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]dziwne zachowanie bazy danych
Forum PHP.pl > Forum > Przedszkole
maraska
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?
viking
Na początek to całe zapytanie załatwiasz składnią INSERT INTO ... SELECT. Posprzątaj to trochę jakimś spintf.
maraska
Jak było w może bardziej czytelnym formacie

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

efekt ten sam
viking
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ń.
in5ane
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.
maraska
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
viking
Jak widzisz z komunikatu nie zgadza się liczba kolumn z wartościami. Innymi słowy 11<>12.
maraska
Zgadzać się zgadza tylko problemem jest pewnie now() do podstawienia za datę w tym zapytaniu.
To zresztą sygnalizował in5ane
viking
Więc jaki dostajesz komunikat błędu po poprawieniu?
maraska
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
in5ane
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 ;-)
maraska
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ł
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.