Zapytanie do bazy - część rekordu

0

Hej, pytanie od początkującego ;)

Mam skrypt php który wyświetla dane z MySQL w formacie JSON

<?php

	header('Content-Type: application/json; Charset=UTF-8');

    $connection = mysqli_connect("***","***","***","***") or die("Error " . mysqli_error($connection));

	$connection -> set_charset("utf8");

	$m = $_GET["tytul"];
    
    $sql = "SELECT * FROM tabela WHERE tytul LIKE ($m)";
    $result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));

    $emparray = array();
    while($row =mysqli_fetch_assoc($result))
    {
        $emparray[] = $row;
    }
    echo json_encode($emparray, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);

    mysqli_close($connection);
?>

W tabeli jedna z kolumn ma nazwę "tytul' i tam są jakies ciagi znaków, np: referat1, referat2, referat3 itd...
Jeśli w przeglądarce wpiszę:

http://adres_serwera.pl/json.php?tytul='referat1'

to wyświetli JSON z danymi dla rekordu z tytułem referat1
mogę link zapisać również tak:

http://adres_serwera.pl/json.php?tytul=%27referat1%27

działa dokładnie tak samo.

Jeśli chce wyświetlić wszystkie rekordy których pierwsze trzy litery to "ref" wpisuje adres:

http://adres_serwera.pl/json.php?tytul='ref%'

lub

http://adres_serwera.pl/json.php?tytul=%27ref%%27

Oczywiście działa.

Pytanie: czy istnieje inny sposób aby wysiwetlić wszystkie artykuły których 3 pierwsze litery tytułu to "ref"? Czy można czymś zastąpić "%" który zastępuje nam znaki w zapytaniu?

0

Wiesz co to SQL Injection?

1

@axelbest: chyba odsylamy do prepared statements :P

0

Tak, wiem.
Powiedzmy, że przez noc napisałem skrypt odporny na SQL injection :)
Więc ma ktoś jakiś pomysł? ;)

0

Hmmm, a czy masz jakiś konkretny problem, czy tylko szukasz innej metody? Bo nie wiem za bardzo co byś chciał osiągnąć.

0

Tak.
Ten URL wykorzystuje aplikacja na Androida.
Tak w skrócie: parsuje w aplikacji JSONa dla przykładu np książki. Mam zdjecie okładki, autora, tytuł, rok wydania... Wszystko wyświetlam parsując URL http://adres_serwera.pl/skrypt.php ale chce mieć możliwośc wyświetlenia ksiązek po tytule. Aplikacja generuje URL np http://adres_serwera.pl/szukaj.php?tytul='tytul 1' co wyświetla ksiązkę o tytule: "tytul 1" i to działa.
Ale chcę wyświetlić ksiązki które w tytule maja słowo np "dom". Aplikacja próbuje pobrac dane z adresu url: http://adres_serwera.pl/szukaj.php?tytul='%dom%'
I teraz najciekawsze! Android 7 i wyższy wyświetla poprawnie dane natomiast starsze androidy nie radzą sobie z tym. metoda prób i błędów doszedłem do tego, że problemem jest "%". Stąd moje pytanie.

1

Wg mnie jeśli masz funkcje szukaj to wystarczy że przekażesz sama frazę np dom, a % mógłbyś dodać do zapytania ręcznie. Tzn jak ktoś wpis np. Dom to znajdzie mu wszystkie książki które to zawierają, jak ktoś poda bardziej dokładny tytuł np dom zły to też znajdzie

0

Nie o to chodzi. Androidy <7 nie parsuja urla w którym jest "%". Nawet jak ustawię na stałe taki url: http://adres_serwera.pl/szukaj.php?tytul='%dom%' to nie będzie działać na nizszych androidach. Stąd moje pytanie czy istnieje jakis inny sposób wyciagnięcia danych z MySQL.

0

Własnie o tym pomyślałem. I zrobiłem tak:

$sql = "SELECT * FROM tabela WHERE tytul LIKE ($m '%')";

Działa :)

Jeszcze musze sprawdzić czy apka to łyknie ;)
Dzięki za zainteresowanie :)

0

Inny sposób, żeby uniknąć % w URLu to base64 encode/decode

1 użytkowników online, w tym zalogowanych: 0, gości: 1