castagir
18.03.2015, 09:33:07
Witam
Ma problem z zapytaniem PDO, które chyba nie odczytuje polskich znaków. PDO Statement wygląda tak:
try {
$polaczenieBD = new PDO
('mysql:host='.$nazwaSerweraBD.';dbname='.$nazwaBD, $uzytkownikBD, $hasloBD, array(PDO
::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")); $polaczenieBD->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch (PDOExeption $e) {
}
$nazwaUzytkownika = 'gość';
$pytanie = $polaczenieBD->prepare("SELECT * FROM `endo_konta_uzytkownikow`
WHERE nazwaUzytkownika=':param1'");
$pytanie->bindValue(':param1', $nazwaUzytkownika);
$pytanie->execute();
Baza danych jest zapisana w 'utf8_unicode_ci', próbowałem także w 'utf8_polish_ci'.
Wcześniej próbowałem rozwiązać ten problem za pomocą encji, lecz też to nic nie daje.
nospor
18.03.2015, 09:38:34
A patrzyles czy ci to dziala w ogole na normalnych znakach?
nie: WHERE nazwaUzytkownika=':param1'");
a: WHERE nazwaUzytkownika=:param1");
castagir
18.03.2015, 09:44:51
Też sprawdzałem.
Pamiętam, że wcześniej udało mi się tylko za pomocą encji otrzymać wynik, ale tylko wtedy jak w bazie były również zapisane encje. Więc pomyślałem, że lepiej byłoby zapisywać po prostu encje w bazie zamiast polskich znaków.
Wcześniej prosiłem o pomoc w jaki sposób można konwertować polskie znaki na encje, ale nie otrzymałem pomocy, więc teraz zadałem inaczej pytanie.
Tutaj dodam, że próbowałem to robić z funkcjami preg_replace i str_replace, lecz też nic
nospor
18.03.2015, 09:48:40
1) Poprawiles blad ktory ci wskazalem?
2) Olej te encje... po to są bazy by tam bylo normalnie a nie encje
3) W bazie mają byc normalne polskie znaki. Jak wkladasz dane do bazy? Moze przy wkladaniu robisz to źle i temu ci nic nie dziala
castagir
18.03.2015, 09:53:27
Za pomocą takiego skryptu to robię.
Samo PDOStatement jest takie samo jak podałem wcześniej.
$pytanie = $polaczenieBD->prepare("INSERT INTO `".$przedrostekBD."konta_uzytkownikow` (
`dataRejestracji`, `nazwaUzytkownika`,
`hasloUzytkownika`, `emailUzytkownika`,
`stopienUzytkownika`)
VALUES (
'ND', 'gość', 'ND', 'ND', 'Gość')");
$pytanie->execute();
Teraz jeszcze modyfikuję wszystko za pomocą MysQL Workbench w Windows 7 - nie wiem czy to ma coś do rzeczy.
nospor
18.03.2015, 09:56:10
Dobra, niech ktoś inny się z tobą uzera, ktos komu nie bedzie przeszkadzać, że nie odpowiadasz na połowę jego pytan. Ja nie mam czasu by go tak marnować i co chwile powtarzać pytanie, ktore juz zadawalem.
castagir
18.03.2015, 10:01:12
Człowieku, zrobiłem tak jak mówiłeś. Nic nie pomogło, bo gdyby tak było to już bym napisał, że sprawa rozwiązana.
Może gdyby moje posty nie były moderowane to by Twój czas nie był tak marnowany.
nospor
18.03.2015, 10:03:16
Napisalem dwa posty odnosnie poprawki. Ani razu sie nie ustosunkowales do niej, wiec rownie dobrze mogles jej w ogole nie zrobic. Tego nie wiedzialem.
Cytat
Może gdyby moje posty nie były moderowane to by Twój czas nie był tak marnowany.
Jakbys nie obrazał ludzi bez żadnego powodu, to byś moderacji nie dostał. I z tego co widze to dobrze ze dostales, bo nadal potrzebujesz ochłoniecia.
Pyton_000
18.03.2015, 10:09:39
Przepraszam że to napiszę.
@castagir czyżbyś nie dostał pomocy na konkurencyjnym forum? Już Ci foch przeszedł?
Naucz się w końcu pokory i odpowiadać na pytania. Tego uczą w szkole podstawowej. Ktoś zadaje pytanie a ktoś inny odpowiada. Więc zamiast lać wodę, smutki, i żale zacznij pisać konkretami i odpowiadać grzecznie jak starsi pytają.
castagir
18.03.2015, 10:23:00
Wybuchłem wczoraj niepotrzebnie, bo wystarczająco dużo osób mi dopiekło i nie wytrzymałem jeszcze śmieszków kolejnych osób tutaj.
Wracając do tematu. Zrobiłem tak jak nospor prosił i nic. Mało tego. Gdy podstawiłem zamiast :param1 normalnie gość to jeszcze dodatkowo błąd mi wywaliło, więc apostrofy muszą być.
$pytanie = $polaczenieBD->prepare("SELECT * FROM `endo_konta_uzytkownikow`
WHERE nazwaUzytkownika=gość");
$pytanie->execute();
nospor
18.03.2015, 10:26:08
Cytat
Gdy podstawiłem zamiast :param1 normalnie gość to jeszcze dodatkowo błąd mi wywaliło, więc apostrofy muszą być.
Grunt to wyciagac "logiczne" wnioski....
Bindowanie to jest co innego niz wstawianie bezposrednio tekstu wiec
podaczas bindowania NIE MOZE byc apostrofówPodczas wkladania normalnie tekstu MUSZĄ BYC apostrofy.
To są dwie różne rzeczy.
castagir
18.03.2015, 10:44:52
Dobra znalazłem już odpowiedz w jakimś tutorialu.
Dzięki za uwagę i pomoc.
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.