Autor Zpráva
IdemeNaHavaj
Profil
Ahoj,
mám vážny problém a neviem čo s tým.
Tak pre príklad mám premenné

$nova_hodnota = "Rozmer (Auta)"; // e
$stara_hodnota = "Rozměr (Auta)"; // ě

a nasledujúci SQL
UPDATE tabulka
SET stlpcek = '{$nova_hodnota}'
WHERE stlpcek = '{$stara_hodnota}'

Som si stý že SQL je dobre PRETOŽE:
ak ho zadám do PHPMyAdmina, a prepíšem si tie premenné za tie hodnoty premenných, tak mi to prepíše v databáze
v poriadku. No v PHP súbore nie.

Prosím o radu.
Ďakujem.
Tori
Profil
Když si vypíšete hotový SQL dotaz, je v pořádku? Provede se ten dotaz? mysql(i)_error hlásí nějakou chybu? Najde podmínka WHERE odpovídající řádek? Máte správně nastavené kódování pro připojení k DB?
IdemeNaHavaj
Profil
Moje pripojenie do DB:
$mysqli = new mysqli("localhost", $user, $pass, $db, 0, $socket);
v PHP mám na konci toho príkazu or die():
$mysqli->query("..prikaz...") or die("error");
aby som vedel, že keby to nešlo tak mi to napíše slovo "error". ale to sa nedeje, takže to cez to prejde, ale v DB sa neprepíše.
SQL dotaz musi byt v poriadku, pretoze v PHPMyAdmin-e funguje a údaj prepíše.

Teraz som si všimol, že v PHPMyAdmin keď "Search" vyhľadám slovo "%Rozměř%" tak mi to nájde aj s normálnym "e" (Rozmer).
Takže ani tam to nereaguje na diakritiku?

Kódovanie tej tabuľky je utf8_general_ci a v PHP súbore mám <meta charset="UTF-8">
Tori
Profil
IdemeNaHavaj:
Teraz som si všimol, že v PHPMyAdmin keď "Search" vyhľadám slovo "%Rozměř%" tak mi to nájde aj s normálnym "e" (Rozmer).
A to je proto, že:
Kódovanie tej tabuľky je utf8_general_ci
(koukněte se na tabulku porovnávání general_ci, jaké znaky se berou jako totožné. Musel byste použít utf8_czech_ci, aby se rozlišovalo "e" a "ě".
IdemeNaHavaj
Profil
Niečo na tom asi bude, ale prečo to teda v phpmyadmine v "SQL" okne funguje aj na utf8_general?
Fisir
Profil
Reaguji na IdemeNaHavaje:
Zkus $mysqli->set_charset('utf8');.
Radoslav
Profil *
IdemeNaHavaj:
V php subore skontroluj kodovanie, nie meta tag, ale ako mas ulozene data, nastav utf-8 a samozrejme pripojenie k databazi
http://screencast.com/t/z0ko9amQL

a ako uviedol Fisir, proceduralne PO pripojeni k db PRED zadanim dotazu, ja pouzivam:
mysqli_set_charset($link, "utf8");
Fisir
Profil
Reaguji na Radoslava:
proceduralne
Prosím, to sem nemotej. Začátečníkům zbytečně zamotáš hlavu. (IdemeNaHavaj už tu začal používat objektový kód, tak ať v tom pokračuje. Ačkoliv míchat procedurální a objektový přístup dohromady je samozřejmě možné.) Na tom, jestli k databázi přistupuješ objektově nebo procedurálně nezáleží.
Radoslav
Profil *
Fisir:
jasne, ze OO kod je vhodnejsi, ale nevsimol som si, ze pouziva OOP az ked si na to upozornil.
Ale je to kazdopadne jedno, ja som ho nemal zaujem pomotat, urcite pozna rozdiel medzi proceduralnym a OO kodom.
- zbytocny off topic

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: