Autor Zpráva
Exkalibr
Profil *
Mám takovýto kód:

$message = forum_linebreaks(forum_trim($_POST['req_message']));
$messageMaxLen = 11;
$query = array(
        'SELECT'    => 'p.id',
        'FROM'      => 'posts AS p',
          'ORDER BY'    => 'p.posted DESC',
          'LIMIT'       => 5,
        'WHERE'     => "p.poster_id=$uid AND ($now - p.posted)<301 AND left( p.message, $messageMaxLen)='".substr($message,0,$messageMaxLen)."' s"
    ); 
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
$results = $forum_db->fetch_assoc($result);

Volám před vložením příspěvku do fora. Cílem je zjistit, jestli uživatel do tabulky posts neodeslal podobný příspěvek během posledních pěti minut. Ořezávám proměnnou se vzkazem na 11 znaků.

Testovací string:

Testujeme nějakej zajímavej řetězec

Na 11 znaku je znak: "ě" a ten mysql nevidí jako shodu. Ale pokud zmenším porovnávací rozsah na 10

$messageMaxLen = 10;

tak to projde a vrátí jeden výsledek.

V PhpMyAdminovi jsem to zkoušel s 20 znaky a neprošlo:
SELECT p.id
FROM posts AS p
WHERE p.poster_id =7
AND ( 1582446884 - p.posted ) <301
AND left( p.message, 20 ) = 'Testujeme nějakej z'
ORDER BY p.posted DESC
LIMIT 5 
Ten příkaz jsem ale zkopíroval přímo výstupního okna prohlížeče FF49 ve kterém není vytištěná hlavička, takže pro tento případ nevím v jakém je to kódování na znaky se nedívejte. Podstatné je že ten první kód mi nefunguje na znaky v utf8.
Kajman
Profil
mb_substr()
Exkalibr
Profil *
Děkuji moc, to byla ale rychlá reakce!

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