Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Złe zapytanie do bazy lub typ pola
vegeta
post
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Witam.

Mam zapytanie update do bazy:
  1. (...)`gg` = '.$_POST['gg'].', `omnie` = '.$_POST['omnie'].',(...)

Problem pojawia się przy omnie. Pole omnie w MySQL to text. Varchar i Tinytext też nie działa.
Kod
SQLSTATE[42S22]: Column not found: 1054 Nieznana kolumna 'Text' w field list
Go to the top of the page
+Quote Post
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Masz dwie opcje:
- kolumny o tej nazwie nie ma w bazie, do której to idzie
- używasz jako nazwy kolumny słowa kluczowego i nie zastosowałeś tych ptaszków -> `nazwa_kolumny`

Poza tym daj całe zapytanie a nie zmienne, bo skąd mamy wiedzieć co idzie do bazy? Struktura tabeli też byłaby nie do pogardzenia.
Go to the top of the page
+Quote Post
vegeta
post
Post #3





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Kod
CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `login` varchar(30) NOT NULL default '',
  `haslo` varchar(35) NOT NULL default '',
  `rej` datetime NOT NULL default '0000-00-00 00:00:00',
  `mail` varchar(35) NOT NULL default '',
  `gg` int(8) default NULL,
  `wiek` int(2) default NULL,
  `imie` varchar(15) default NULL,
  `nazwisko` varchar(30) default NULL,
  `miasto` varchar(20) default NULL,
  `plec` char(1) default NULL,
  `omnie` text,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `login` (`login`),
  UNIQUE KEY `mail` (`mail`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin2 AUTO_INCREMENT=4;


  1. $stmt = $pdo -> prepare('UPDATE `user` SET `wiek` = '.$_POST['wiek'].', `gg` = '.$_POST['gg'].', `omnie` = '.$_POST['omnie'].', `plec` = '.$_POST['gg'].', `imie` = '.$_POST['imie'].', `nazwisko` = '.$_POST['nazwisko'].', `miasto` = '.$_POST['miasto'].' WHERE `id`='.$_SESSION['user_id'].'');
Go to the top of the page
+Quote Post
Pilsener
post
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Daj:
  1. echo 'UPDATE `user` SET `wiek` = '.$_POST['wiek'].', `gg` = '.$_POST['gg'].', `omnie` = '.$_POST['omnie'].', `plec` = '.$_POST['gg'].', `imie` = '.$_POST['imie'].', `nazwisko` = '.$_POST['nazwisko'].', `miasto` = '.$_POST['miasto'].' WHERE `id`='.$_SESSION['user_id'].'';


I wklej co pokaże, bo czasem zmienne przyjmują zaskakujące wartości, także metoda prepare może tu coś mieszać, postaraj się wyświetlić zapytanie, które idzie do bazy.

A jakiego używasz programu do obsługi bazy? Może coś z konfiguracją pola? Jak wpisujesz tam coś w (phpmyadmin czy jakimś innym programie do obsługi bazy) to dodaje bez problemu? Spróbuj wkleić to zapytanie.
Go to the top of the page
+Quote Post
vegeta
post
Post #5





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


PMA do edycji bazy.
Zapytanie przy tworzeniu nowego usera:
  1. INSERT INTO `user` ( `id` , `login` , `haslo` , `rej` , `mail` , `gg` , `wiek` , `imie` , `nazwisko` , `miasto` , `plec` , `omnie` )
  2. VALUES (
  3. NULL , 'Login', 'haslo', '2010-08-08 00:00:00', 'test@test.test', '555555', '55', 'Piotruś', 'Pan', 'Nibylandia', 'M', 'Test test test'
  4. );

Echo po wysłaniu formularza:
Kod
UPDATE `user` SET `wiek` = 55, `gg` = 555555, `omnie` = Text, `plec` = M, `imie` = Piotruś, `nazwisko` = Pan, `miasto` = Nibylandia WHERE `id`=3
Go to the top of the page
+Quote Post
skarabe.pl
post
Post #6





Grupa: Zarejestrowani
Postów: 142
Pomógł: 49
Dołączył: 29.07.2010

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


Moment moment, przecież wokół pola tekstowego `omnie` brakuje cudzysłowów (a w zasadzie apostrofów) - więc nic dziwnego że się wysypuje, skoro MySQL otrzymuje coś takiego: 'UPDATE ... SET `omnie` = jestem wesoły Romek, mam na przedmieściu domek WHERE ...'

Ten sam problem dotyczy zresztą wszystkich pozostałych pól nienumerycznych. Kiedy nie wiesz czemu zapytanie nie działa - pierwszą Twoją reakcją powinno być wyplucie go sobie za pomocą echo i wklejenie do SQL Browsera (np. phpMyAdmin-a).
Go to the top of the page
+Quote Post
vegeta
post
Post #7





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Gdzie mam ten apostrof wstawić? Próbowałem różnych przestawień w zapytaniu.

PMA zwraca taki sam błąd jak w pierwszym poście w tym temacie, ale pola cyfrowe wyglądają tak: 'pole' =numer, a pola tekstowe: 'pole' = tekst
Go to the top of the page
+Quote Post
skarabe.pl
post
Post #8





Grupa: Zarejestrowani
Postów: 142
Pomógł: 49
Dołączył: 29.07.2010

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


Jak to gdzie? Tu:
  1. echo 'UPDATE `user` SET `wiek` = '.$_POST['wiek'].', `gg` = '.$_POST['gg'].', `omnie` = '.$_POST['omnie'].', `plec` = '.$_POST['gg'].', `imie` = '.$_POST['imie'].', `nazwisko` = '.$_POST['nazwisko'].', `miasto` = '.$_POST['miasto'].' WHERE `id`='.$_SESSION['user_id'].'';

Powinno być:
  1. echo "UPDATE `user` SET `wiek` = '{$_POST['wiek']}', `gg` = '{$_POST['gg']}', `omnie` = '{$_POST['omnie']}', `plec` = '{$_POST['gg']}', `imie` = '{$_POST['imie']}', `nazwisko` = '{$_POST['nazwisko']}', `miasto` = '{$_POST['miasto']}' WHERE `id`='{$_SESSION['user_id']}'";

Przestawiłem kolejność cudzysłowów (wewnętrzne/zewnętrzne) - tak mi się wydaje że jest czytelniej.
Go to the top of the page
+Quote Post
vegeta
post
Post #9





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Czyli zamiast .
  1. echo 'UPDATE `user` SET `wiek` = '.$_POST['wiek'].', `gg` = '.$_POST['gg'].',

Mam wstawić '
  1. echo 'UPDATE `user` SET `wiek` = '`$_POST['wiek']`', `gg` = '`$_POST['gg']`',
Go to the top of the page
+Quote Post
thek
post
Post #10





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Nie... każdą wartość tekstową musisz otoczyć normalnym apostrofem, a nie ciapkami. By zaś to nie kolidowało z zastosowanymi apostrofami jako oznaczenie stringu... zastosuj do nich znak ucieczki. Ma więc być:
  1. echo 'UPDATE `user` SET `wiek` = \''.$_POST['wiek'].'\', `gg` = \''.$_POST['gg'].'\'';


PS: skarabe.pl też dobrze Ci pisze.Czemu więc nie sprawdziłeś tego co Ci podał jako gotowca?


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
vegeta
post
Post #11





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Skopiowałem dokładnie to co napisałeś w tagu PHP i
Kod
Parse error: syntax error, unexpected '='


EDIT
Mam oczojeba już od tego kodu nie zauważyłem "; w twoim kodzie biggrin.gif Teraz wszystko działa. Dzięki.

Ten post edytował vegeta 8.08.2010, 16:07:25
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 - 10:23