Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie MYsql
Forum PHP.pl > Forum > Bazy danych > MySQL
GranDi88
Witam,

Mam mały problem z wykonaniem zapytania dodania do bazy danych rekordu z danymi nadesłanymi z formularza. Wszystko działa poprawnie, dane z pól formularza przesyłane są do pliki php, połączenie z bazą danych udaje się nawiązac, wybrać bazę też idzie bez problemu natomiast skrypt zwraca błąd podczas dodania rekordu.
Tak wygląda kod odpowiadający za połączenie z bazą danych oraz dodaniem rekordu:
  1. <?php
  2. $polacz = mysql_connect ("adres serwera", "login", "hasło")
  3.    or die("BLAD: nie mozna sie polaczyc z serverem MySQL");
  4.  
  5. mysql_select_db("nazwa_bazy")
  6.    or die("Nie mozna wybrac danej bazy danych");
  7.  
  8. $zapytanie = ("INSERT INTO tabela(id, status)
  9.           VALUES ('$id', '$status')");
  10. $wykonaj = mysql_query($zapytanie)
  11.    or die("Nie mozna dodac rekordu");
  12. mysql_close($polacz);
  13. ?>

Tak mam zczytane pola z formularza:
  1. <?php
  2. $status = $_POST['status'];
  3. ?>

Bardzo proszę o pomoc w kwesti niechęci działania tegoż skrypcika. Ja wypróbowałem już chyba wszystkie co tylko przyszło mi do głowy.
Z góry dzięki za pomoc smile.gif
webasek
A gdzie pobierasz id? Pewnie jest to pole auto_increment? Wię jeśli tak to wystarczy zrobić:

  1. INSERT INTO tabela (STATUS) VALUES ('$status')
nevt
status jest słówkiem zastrzeżonym w MySQL, więc musisz dodać `odwrócone apostrofy` do nazw tabel i pól:
  1. INSERT INTO `tabela` (`id`, `status`) VALUES ('$id', '$status');

powodzenia.
GranDi88
Tak pole id to auto_increment. Niestety jednak sposób który podałeś również nie działa. Skrypt zwraca mi ten sam błąd. sad.gif

Niestety, ten sposób też nie działa. Nic nie dało dodanie tych apostrofów. Dalej otrzymuje ten sam błąd.
melkorm
może napsizesz jaki błąd ? tongue.gif
GranDi88
Cytat(melkorm @ 1.10.2008, 19:07:00 ) *
może napsizesz jaki błąd ? tongue.gif


Błąd dodania rekordu - określona w kodzie jego treść brzmi "Nie mona dodac rekordu"
melkorm
wywal or die i wklej nam błąd ?
GranDi88
Cytat(melkorm @ 1.10.2008, 19:11:15 ) *
wywal or die i wklej nam błąd ?


Najnowsza mozila bo wywaleniu or die wyświetliła:
"Błąd wczytanie strony"
Błąd kodowania zawartości
Otwierana strona nie może zostać wyświetlona, ponieważ używa nieprawidłowych lub nieobsługiwanych metod kompresji.
Otwierana strona nie może zostać wyświetlona, ponieważ używa nieprawidłowych lub nieobsługiwanych metod kompresji.

* Prosimy poinformować właścicieli witryny o tym problemie.

Natomiast Internet Explorer wyświatla komunikat: :Nie moża wyświetlić tej strony: (pliku php podanego w action w formularzu)

Widzę że trochę problematyczny jest ten wątek ;/. Do tej pory zawsze tak robiłem i zawsze było ok. Tym razem jednak nie jest. Czekam na dalsze pomocne propozycje.
nrafal
Zamiast konstrukcji z die daj:
  1. <?php
  2. mysql_query($zapytanie) or print mysql_error();
  3. ?>


Co wyszło?
GranDi88
Cytat(nrafal @ 1.10.2008, 20:40:07 ) *
Zamiast konstrukcji z die daj:
  1. <?php
  2. mysql_query($zapytanie) or print mysql_error();
  3. ?>


Co wyszło?


Błąd:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''zamowienia' ('id', 'status', 'name', 'email', 'telefon', 'zamawiaml', 'pakietl'' at line 1

Pól w formularzu mam oczywiscie wiecej niż napisałem. Ale nawet w takiej opcji jak podałem nic nie działa.
nrafal
Hm, fajnie by było zobaczyć kompletne, wygenerowane zapytanie żeby Ci pomóc. Jak tak zatajasz pola itp to trochę wróżymy z fusów...

A id nie masz przypadkiem jako INT w bazie? Wtedy IMHO nie powinieneś brać go w apostrofy?
GranDi88
Przy opcji takiej jak podałem zaczynając temat (tylko dwa pola - id i status) uzyskuje błąd:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''zamowienia' ('id', 'status') VALUES ('', 'osoba prywatna' at line 1

Cytat(nrafal @ 1.10.2008, 20:53:51 ) *
A id nie masz przypadkiem jako INT w bazie? Wtedy IMHO nie powinieneś brać go w apostrofy?


Podałem zatem błąd przy opcji takiej jak opisałem w rozpoczeciu tematu. Teraz nie trzeba wróżyć z fusów smile.gif.
ID zgadza się jest jako INT jednak nie rozumiem o co chodzi z 'IMHO'.
nrafal
Cytat(GranDi88 @ 1.10.2008, 20:57:38 ) *
Przy opcji takiej jak podałem zaczynając temat (tylko dwa pola - id i status) uzyskuje błąd:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''zamowienia' ('id', 'status') VALUES ('', 'osoba prywatna' at line 1


W pole ID typu int próbujesz wstawić w tej chwili pusty string ( '' ). Skoro ID jest auto_increment to nie musisz wstawiać nic i wtedy zapytanie wyglądałoby tak jak pisał webasek. Zwróć też uwagę na to, że nazwy pól powinny być w odwróconych apostrofach (` ) - to są te nad klawiszem tab, wg Twojego błędu wpisujesz tam zwykłe apostrofy...
Jeśli te ID jest puste przez przypadek to i tak wartość nie powinna być w apostrofach. Czyli w kodzie:
  1. <?php
  2. ... VALUES($id,'$status') ...
  3. ?>


Zamiast

  1. <?php
  2. ... VALUES('$id','$status') ...
  3. ?>


Cytat
ID zgadza się jest jako INT jednak nie rozumiem o co chodzi z 'IMHO'.


http://pl.wiktionary.org/wiki/IMHO ;-)
GranDi88
Niestety...

  1. <?php
  2. $zapytanie = ("INSERT INTO `zamowienia` (`status`)
  3. VALUES (`$status`)");
  4. $wykonaj = mysql_query($zapytanie)
  5. ?>

zwraca błąd:
Unknown column 'osoba prywatna' in 'field list'
  1. <?php
  2. $zapytanie = ("INSERT INTO zamowienia (`status`)
  3. VALUES (`$status`)");
  4. $wykonaj = mysql_query($zapytanie)
  5. mysql_close($polacz);
  6. ?>

zwrrca również błąd:
Unknown column 'osoba prywatna' in 'field list'
  1. <?php
  2. $zapytanie = ("INSERT INTO zamowienia (status)
  3. VALUES (`$status`)");
  4. $wykonaj = mysql_query($zapytanie)
  5. mysql_close($polacz);
  6. ?>

zwraca również ten sam błąd.
  1. <?php
  2. $zapytanie = ("INSERT INTO zamowienia (status)
  3. VALUES ($status)");
  4. $wykonaj = mysql_query($zapytanie)
  5. ?>

zwraca błąd:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'prywatna)' at line 2

Nic już z tego nie rozumiem. Każdy napisał coś, być może ja tego wszystko nie umiem złożyć dobrze w całość. Prosze o konkretny kod przygotowany na podstawie tego co podałem.
phpion
  1. <?php
  2. $zapytanie = ("INSERT INTO zamowienia (`status`) VALUES ('$status')");
  3. $wykonaj = mysql_query($zapytanie)
  4. mysql_close($polacz);
  5. ?>

W takiej formie powinno zadziałać.
GranDi88
Niby działa... niby dlatego że do bazy danych informacje i owszem są zapisywane. Najnowszy firefox zwraca jednak treść Błąd kodowania zawartości.

OK, mój błąd. Wszystko działa poprawnie. Zapomniałem dodać linijki z np echo "gotowe";
WIELKIE DZIĘKI smile.gif
Soulast
Chciałbym się podłączyć do tematu ponieważ mam nieco podobny problem z zapytaniem.

po rejestracji użytkownika przy pomocy mysql_error() wyrzuca mi błąd :
  1. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1


A oto zapytanie :

  1. $add = mysql_query("INSERT INTO " . USER_TABLE . " ( `id` , `pseudo` , `mail` , `email` , `url` , `pass` , `niveau` , `date` , `activite` , `avatar` , `signature` , `rang` , `user_theme` , `user_langue` , `count`, `country` ) VALUES ( '" . $user_id . "' , '" . $pseudo . "' , '" . $mail . "' , '" . $email . "' , '' , '" . $cryptpass . "' , '" . $niveau . "' , '" . $date . "' , '' , '' , '' , '' , '' , '' , '', '" . $country . "' )");
  2. $req = mysql_query($add) OR die(mysql_error());


Pomimo błędu wyskakującego, wszystkie dane pomyślnie zostają dodane do tabeli...Więc skąd ten błąd?

Z góry dziękuje za wszelką pomoc...
Ramzaa
Daj małpkę przed mysql_query i po problemie, a co do błędu, to nie jestem pewien, ale ja bym zrobił to tak:

  1. INSERT INTO `tabela` (id, pseudo, mail, email..) VALUES (null, '$pseudo', '$mail', '$email'..)
Mchl
Cytat(Ramzaa @ 4.08.2010, 07:27:39 ) *
Daj małpkę przed mysql_query i po problemie,


<facepalm>

W domu też śmieci pod dywan zamiatasz?


Soulast: Jeżeli zapytanie rzuciło błędem, to dane nie zostałyby zapisane do bazy. Mamy więc dwie możliwości.
1. Albo masz inne zapytanie które rzuca błędem
2. Albo te dane dodawane są w innym miejscu
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.