PHP + MySQL - wczytywanie zmiennych, pomoc z polskimi znakam

Witam serdecznie,

jakiś czas temu robiłem stronę w PHP połączoną z bazą danych MySQL i wszystko ładnie działało. Konkretnie chodzi o to, że w zapytaniu SQL porównuje zmienną z bazy oraz wartość parametru z adresu; dotychczas za pomocą funkcji w SQL usuwalem polskie znaki i wtedy w adresie wpisując np. ‘ges’ poprawnie wyświetlała się strona. Niemniej jednak zmieniłem teraz serwer na Cal.pl, na którym okazało się, że nie można wykonać funkcji w SQL ktora zamienia polskie znaki na normalne, więc próbowałem rozwiązać to w samym PHP, ale nie dałem rady. Ni jak nie można usunać w zapytaniu SQL polskich znaków używając PHP.

Przykład: $query = “SELECT * FROM autorzy WHERE (bez_pl_diakrytycznych(imie)) = ‘$imie’)”;

chodzi o fragment (bez_pl_diakrytycznych(imie)), ponieważ teraz nie mogę już użyć funkcji SQL bez_pl_diakrytycznych. Można to w jakikolwiek innych sposób rozwiązać, aby później przyjazne linki również działały bezproblemowo, bo sam nie mam już żadnego pomysłu?

Czyli jest tak, że w bazie MySQL trzymasz imię z polskimi znakami diakrytycznymi, ale skrypt w PHP operuje na wartościach bez takich znaków?

Masz dwa rozwiązania:

  1. Przerobić bazę danych MySQL tak, by dodać dodatkowe pole, gdzie będzie trzymane imię bez polskich “ogonków”;

  2. Użyć procedury/funkcji MySQL napisanej przez siebie (http://www.sql-kursy.pl/mysql-tworzenie-funkcji-procedur-create-function-procedure.html, http://www.blog.ravns.net/zamiana-polskich-znakow-diakrytycznych-na-ich-odpowiedniki-bez-kropek-kresek-i-ogonkow-w-zapytaniu-mysql/, http://www.flash.com.pl/select-bez-polskich-liter-t2465.html) - o ile możesz na tym hostingu z tego skorzystać.

Myślałem o dodatkowych polach, ale to znowu dodatkowe dane trzymane w bazie. Procedur/funkcji nie moge używać tak jak pisałem wcześniej, na innym serwerze właśnie to wykorzystywałem, jednak teraz administracja odpisala, że nie jest to możliwe.

No to masz tylko to 1. wyjście. Możesz je nieco zmodyfikować i zamiast całego imienia (bez polskich liter) trzymać jego hash, co dla dłuższych tekstów przyspieszy działanie wyszukiwania (poza tym koniecznie zrób indeks na tę kolumnę, ale to pewnie wiesz i zrobiłeś). Oczywiście wtedy w PHP polecenie wyszukiwania musisz stosownie zmodyfikować (ale hash liczysz w kodzie raz dla danego imienia, a potem używa się go w SELECT). Oczywiście dla krótkich tekstów (typowe imiona) hash będzie dłuższy i nie da oczekiwanego zysku, ale tak napisałem o tym, bo może Ci się ten pomysł (kiedyś) przyda do czegoś.