Autor Zpráva
SkyVessel
Profil
Potřebuji porovnat údaj v databázi se zadaným do formu bez ohledu na velikost písmen...
$sql= "SELECT id FROM players WHERE LOWER(nick)='strtolower($nick)'";

Dlouho jsem dumal nad tím, proč mi to nejede, když si myslím, že je to správně :D...
Nakonec jsem problém vyřešil úpravou
$nick_pom = strtolower($nick);
$sql= "SELECT id FROM players WHERE LOWER(nick)='$nick_pom'";
...

Jak správně napsat syntaxi, abych to nemusel takto rozepisovat? Děkuji
TomášK
Profil
v prvním případě pro nick 'Tom' porovnáváš řetězce(!) 'tom'= 'strtolower(Tom)', proto to nefunguje.
Korektní zápisy jsou tyto:
$sql= "SELECT id FROM players WHERE LOWER(nick)=LOWER('$nick_pom')";
$sql= "SELECT id FROM players WHERE LOWER(nick)='".strtolower($nick_pom)."'";
$sql= "SELECT id FROM players WHERE nick LIKE '$nick_pom' COLLATE utf8_general_ci";

Možná i
$sql= "SELECT id FROM players WHERE nick='$nick_pom' COLLATE utf8_general_ci";  

Nastavení COLLATE záleží na kódování, v jakém je to uložené v databázi, může být v tvém případě jiné.
SkyVessel
Profil
Díky moc... už mi to došlo - hold někdy potřebuji nakopnout O:)
v mé db používám cp1250_czech_cs (ale už jsem dostal doporučení na utf8...)
Takže jestli jsem to dobře pochopil, tak díky COLLATE mohu porovnávat nezávisle na velikosti a diakritiky... Dobrý :)

takže bych mohl použít proměnnou $nick, ve které mám řetězec 'Tom' ...
...a pokud jsem to dobře pochopil tak 'tom' = 'Tóm' při
$sql= "SELECT id FROM players WHERE nick='$nick' COLLATE cp1250_czech_cs";

nebo 'tom' = 'Tom' při
$sql= "SELECT id FROM players WHERE LOWER(nick)=LOWER('$nick')";

?? Je to tak správně? =)
TomášK
Profil
_cs na konci collate značí case_sensitive. Potřebuješ něco, co končí _ci, pravděpodobně cp1250_general_ci. S diakritiou to prý také jde pomocí COLLATE, ale pro cp1250 mi to nefungovalo, příliš jsem to nezkoumal. Poslední příklad bude fungovat.

Při použití LOWER určitě nebudou fungovat indexy, při použití collate nevím.

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