Autor Zpráva
Jakub2121
Profil *
Dobrý večer, mám zajímavý problém. Když v aplikaci phpLiteAdmin zadám příkaz
SELECT title,description,created,hashtag FROM snaps WHERE hashtag LIKE '%test s%' OR title LIKE '%test s%' LIMIT 30
najde to správně řádek kde title je ,,test s popisem".
Pokud udělám query v php, daný řádek to najde.
$q = $db->query("SELECT title,description,created,hashtag FROM snaps WHERE hashtag LIKE '%$str%' OR title LIKE '%$str%' LIMIT 30");
Hodnoty v proměnné jsou správně - tedy ,,test s".
Vlastně mi query v php přestane fungovat vždy, když přidám mezeru... může to být něco s charsetem? Děkuji
blaaablaaa
Profil
Jakub2121:
Doporučuji si dotaz, který je v php vypsat, asi do $str nejde to, co si myslíš. Taky pozor na to, že pokud není $str nijak ošetřeno, je dotaz náchylný k sql injection.
Kajman
Profil
Nejlépe si zkontrolovat i byty, jestli v $str např. není nedělitelná mezera místo normální.
bin2hex($str)
Jakub2121
Profil *
blaaablaaa:
Pokud dám místo $q = $db... echo, tak to vypíše query správně, tedy
SELECT title,description,created,hashtag FROM snaps WHERE hashtag LIKE '%test s%' OR title LIKE '%test s%' LIMIT 30
$str je ošetřeno pomocí $str = SQLite3::escapeString($_POST["str"]);
Kajman:
bin2hex vyhodí (die(bin2hex($str));)
746573742073
a to vůbec nevím co znamená.
Každopádně (die(bin2hex("test s"));) dá totéž.
746573742073



ještě dodám, že data do $str posílám pomocí jquery $.postu.
Kajman
Profil
Vypadá to v pořádku. Dělá to i na jiném serveru (např. jiná verze php)?
Jakub2121
Profil *
Kajman:
To bohužel teď nemohu ověřit.



Teď jsem zjistil, že když přidám ,,title s mezerou" přímo přes phpLiteAdmin, tak mi ho skript v pořádku nalezne.

Pokud si vytáhnu problémový záznam napřímo přes query ID=xxx a vložím výsledek to hex2bin, vyhodí to
echo $r["title"]; // title s mezerou
die(hex2bin($r["title"]));
hex2bin(): Hexadecimal input string must have an even length

Nemůže být nějaký problém při přidávání záznamu do db?
Řeším to stejně jako nahoře -> přijmu přes POST data, ošetřím je a vložím do DB...
Keeehi
Profil
Jakub2121:
die(hex2bin($r["title"]));
Máš to opačně. Má to být bin2hex.

Nemůže být nějaký problém při přidávání záznamu do db?
Může. Ale to se nejspíše dozvíme když nám sem dáš výsledek té bin2hex funkce.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0