Autor Zpráva
escape_string
Profil *
Ahoj,

používám znakovou sadu utf-8, jedu na php i mysql řady 5. Vše funguje super, akorát mi nefunguje funkce mysql_real_escape_string, resp. mysql_escape_string, zkoušel jsem to s obouma. U sebe na localhsotu je vše o.k. Scripty nahraju na server (jedu přes cesky-hosting) a neescapuje, kde je problém?

Zde jsou funkce, který mi jak jsem už říkal na localhostu fungují:




function sql_string($txt) {
return "'". $this->mysqli->real_escape_string($txt) ."'";
}

function sql_integer($int) {
return (integer) (trim($int) + 0);
}


Ukládám do databáze např. takto:

$sql = "INSERT INTO tabulka (něcovtextu, něcovčísle) VALUES (".$db->sql_integer($číslo).", ".$db->sql_string($text).")";
$db->funkceprovložení($sql, __FILE__, __LINE__);

Nemáte s tím někdo zkušenosti, proč na localhostu ANO a na serveru NE?
loyza
Profil
ůbec nevím, jen tak plácám, ale nemůže to být třeba tím, že na serveru vůbec mysqli není? Jinak nevím, koukal sem do manuálu, což předpokládám, že ty taky ;) ale nic tam k tomu není.
escape_string
Profil *
Mysqli určitě na serveru je. LOL.

Řeším to s podporou cesky-hosting.cz
escape_string
Profil *
Tak nic, ani podpora neví kde je zakopán pes.
Dokonce jsem vložil natvrdo před INSERT str_replace na vložení zpětných lomítek, ale v databázi se zpětný lomítka prostě neobjevily:

$msgText = str_replace("'", "''", $msgText);
$msgText = str_replace("\\", "\\\\", $msgText);

// uložení nové zprávy
$sql = "INSERT INTO tabulka () VALUES ('".$msgText."')";
$db->funkceproulozeni($sql, __FILE__, __LINE__);
$db->close();

Neslyšel jste někdo o tom, že by třeba phpMyAdmin NEZOBRAZOVAL zpětná lomítka, z nějakého principu???? Už mi fakt hrabe, ale nevím co už.
escape_string
Profil *
Samo že INSERT INTO tabulka (text) ... :-)
escape_string
Profil *
Souhlasíte s tímto prohlášením?
Ja tedy zadny problem nevidim. Escapovani podle meho nazoru slouzi k tomu, aby
> nebyl zmenen obsah a smysl SQL dotazu specialnimi znaky, jako je napriklad
> apostrof, ktery se pouziva pro oddelovani textu. Specialni znaky jsou escapovany
> zpetnym lomitkem, to vsak do databaze ulozeno neni, nebot je to pouze pomocnym
> znakem, ktery neni soucasti obsahu puvodniho dotazu.
>
> Chcete-li zpetne lomitko do databaze vlozit, musite ho predem escapovat. Priklad
> jsem upravil (na rozbitou cestinu nekoukejte, konzolove editory na serveru moc
> cesky neumeji...), ted je na konec textu jeste pridano jedno zpetne lomitko (ve
> zdroji escapovane), je vlozeno do databaze.
>
> S pozdravem
> Jakub Mach
>
> Zakaznicka podpora Cesky hosting
> podpora@ceskyhosting.cz
> www.cesky-hosting.cz[/i]


k čemu je potom funkce stripslahes?

Já se domnívám, že zpětná lomítka JSOU při escape_string do databáze ukládána.


Prosím, rozlouskněte to už někdo.
nightfish
Profil
pokud použiješ dotaz
insert into tabulka values ('nějaký text\'který obsahuje apostrof')

tak se do databáze uloží
nějaký text'který obsahuje apostrof
to je chování naprosto logické

pokud budu chtít do databáze uložit text
nějaký text\'který obsahuje escapovaný apostrof
musím použít dotaz
insert into tabulka values ('nějaký text \\\'který obsahuje escapovaný apostrof')
(první dvě lomítka se přeloží na jedno lomítko, další lomítko escapuje ten apostrof)
escape_string
Profil *
Použil jsem toto:
<?php
   $mysqli = new mysqli('xxxxxxxx', xxxxxxxxxxxx', 'xxxxxxxxxxxxxxxxxxxxxxxxxx',  'xxxxxx');
        if(!$mysqli) {die('Chyba při připojení k databázi!');}

           $slova = " Test's words isn't red "color" ";
 
           $ins = "INSERT into test (test_text) VALUES ('".$mysqli->real_escape_string($slova)."')";

           $dodb = $mysqli->query($ins) or die ("Chyba: ".$mysqli->error);
 
           if($dodb) echo 'Úspěšně vloženo jako: <br />';
           echo $ins;
 ?> 


Do databáze se mi uložilo Test's words isn't red "color"

Proměnná $ins vypsala na sklo: Test\'s words isn\'t red \"color\"

Je to v pořádku?
nightfish
Profil
Je to v pořádku?
ano
escape_string
Profil *
A poslední dotaz, co ten stripslashes, mám ho používat? Vždyť nemá co stripovat? (zpětná lomítka)

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: