Za darmo na e-mailPraktyczny kurs PHP (aż 200 stron!)

Krok po kroku, opanuj podstawy PHP za darmo - praktyczny kurs w formie e-booka prosto na Twój e-mail

Dlaczego nie działa poprawnie LIKE %slowo% w prepared statement

3.99K viewsMariaDB mysql php
0

Cześć. Od wielu godzin szukam rozwiązania problemu na 10.1.45-MariaDB-0+deb9u1 – Debian 9.12. Nie działa mi poprawnie następujący fragment kodu:

$opis_p = "%".$opis."%";
        $stmt1 = $mysqli->prepare(" SELECT email, lokalizacja, data_znaleziska, opis FROM znalezione WHERE (data_znaleziska >= ?) AND (opis LIKE ?) ORDER BY data_znaleziska ");   // 
                   $stmt1->bind_param('ss', $data_zguby, $opis_p);
                   $result1 = $stmt1->execute();
                            $stmt1->bind_result($email, $lokalizacja, $data_znaleziska, $opis);
                   $stmt1->store_result();
                   $stmt1->fetch();

Chodzi o maskę LIKE %slowo%. Pole OPIS ma takie np. wartość: Sowa kropka ZWIEJKA (oczywiście to jednej z rekordów). Jeśli szukam po słowie “sowa” wszystko jest OK – rekord się pojawia na liście wyników. Jeśli po “kropka” lub “zwiejka” (bez względu na wielkość liter), to rekord NIE JEST znajdowany (!!!!!). Najśmieszniejsze jest to, że gdy szuka po fragmencie słowa, czyli “krop”, to też jest OK. Nie mam pojęcia o co chodzi. Nie chciałbym uruchamiać strony BazaRzeczyZnalezionych.pl z taką “wadą”, ale jak nie będzie wyjścia… Dlatego HELLP PLEASE!!!

Marcin Wesel Posted new comment 13 listopada 2020

Opisywane działania można zobaczyć na stronie: https://non-profit.eu/!nav5.php . Jest ona under construction, więc proszę bez krytyki 😉

Spróbuj zrobić pełne zapytanie w prepare.
prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
Zbuduj pełne query i wykonaj bez bind. Będziesz mógł zobaczyć, co idzie do bazy i wykonać to w jakimś tool po podłączeniu się do bazy. Może gdzieś wkrada się spacja?

Dzięki za podpowiedź. Jak na razie nie używam PDO i może to nie bardzo dużo dodatkowej robot, ale poprzestanę na tym co napiszę pod komentarzem Marcina. Dzięki!

Add a Comment
0

Dziękuję za racjonalną podpowiedź. Niestety, upgreadowałem bazę do 10.4.16-MariaDB i nic się nie zmieniło. Jest jeszcze wersja 10.5 ale raczej poprzestanę na właściwej inforamcji w “instrukcji” do obsługi bazy zamiast stawiać wszytko od nowa z nikłą nadzieją że błąd został naprawiony.

Dzięki raz jeszcze.
PS.
A może zgłosić ten błąd do MariaDB Fundation?

Marcin Wesel Posted new comment 10 listopada 2020

Jeśli potwierdzisz, że to wina MariaDB, to jasne. Musiałbyś zainstalować ten sam skrypt i podpiąć inną bazę. Wtedy, jeśli zadziała, będziesz miał klarowny obraz sytuacji. Problem może też leżeć po stronie biblioteki PDO i ich wsparcia dla MariaDB. Trzeba popróbować.

Add a Comment
You are viewing 1 out of 3 answers, click here to view all answers.
Write your answer.
Ominiesz taką okazję?Praktyczny Kurs PHP (aż 200 stron!) za darmo

Gorąco polecam, naprawdę warto skorzystać! To nic nie kosztuje. Krok po kroku, opanuj podstawy PHP za darmo - praktyczny kurs w formie e-booka prosto na Twój e-mail.