Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Złe zapytanie do bazy lub typ pola
Forum PHP.pl > Forum > Przedszkole
vegeta
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
Pilsener
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.
vegeta
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'].'');
Pilsener
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.
vegeta
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
skarabe.pl
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).
vegeta
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
skarabe.pl
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.
vegeta
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']`',
thek
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?
vegeta
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.
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.