Autor Zpráva
matess
Profil *
Mám takový problém.
Ukládám si na stránky oblíbené videa a potřebuji je ukládat tímto způsobem:

$vid = "s2df545df"; // $vid je nazev videa
mysql_query('INSERT INTO `videa` (`id`, `video`) 
                      VALUES (NULL, "<object height="300" width="300">
                                                  <param name="movie" value="http://server_videa/player/">
                                                  <param name="flash" value="id='.$vid.'&style=sal">
                                                  <embed src="http://server_videa/?id='.$vid.'&style=sal" type="application/x-shockwave-flash" height="300" width="300">
</object>")');


Problém je v tom, že mi to neuloží.
Mysql_error vypisuje toto:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '300" width="300">


Tuším li správně, tak je problém někde z uvozovkami. Prosím poraďte mi jak mám dát správně uvorovky a stredníky aby to fungovalo.

Děkuji
ShiraNai7
Profil
Prožeň ten vkládaný html kód funkcí mysql_real_escape_string().
pmg
Profil
Koukni na dibi a ušetříš si práci;-)
šárinka
Profil
pmg
už jsi tu jednou psal přežen to přes dibi, ale vůbec jsem nepochopil jak tu dibi používat přečetl jsem tam ty články a vůbec netuším pokud to někdo víte a mohly by jste mi to vysvětlit tak moje icq 496404138
pmg
Profil
Aha, nebude to těžší, než to vypadá. Napřed musíš vložit knihovnu dibi / dibi.compact.php, prostě si ji stáhni, rozbal do složky se www soubory a použij require. Podle příkladu se připojíš k databázi.

require './dibi/dibi.compact/dibi.compact.php';

dibi::connect(array(
'driver' => 'mysql',
'host' => 'localhost',
'username' => 'root',
'password' => '***',
'database' => 'test',
'charset' => 'utf8',
));

Doteď dobrý? A teď už se dá normálně používat dibi::query. Pokud potřebuješ do dotazu vložit nějakou proměnnou, předáš ji jako další parametr funkce s tím, že pomocí uvedených modifikátorů určíš její typ, viz odkaz.
šárinka
Profil
pmg
takže includu pak se připojím k mysql no a pak když budu chtít editovat text tak dám
dibi::query('UPDATE `table` SET `text`=%s', $text); ? To je vše?
pmg
Profil
Ano, má to výhodu, že vkládanou proměnnou není potřeba ošetřovat pomocí mysqli_real_escape_string ani ji uzavírat do apostrofů. Pokud je ale proměnná číselná, použije se místo %s %d (číslo bez znaménka) a obdobně.

Dost praktické je, že se při předávání dat pro úpravy / vkládání dá předat pole a hodnoty se automaticky escapují a vypíší se jako seznam.

Názvy tabulek můžeš místo zpětných uvozovek uzavírat do [hranatých závorek], jestli se ti to lépe píše. Přizpůsobí se to totiž automaticky použité databázi (položka driver při připojení).

Příkazy select vracejí speciální objekt, který lze procházet pomocí foreach nebo zavolat jeho metodu fetchAll a dostaneš všechny záznamy jako pole.

Chyby prakticky není potřeba ošetřovat, protože se detekují automaticky a vyhazuje se výjimka.
šárinka
Profil
tak a když sem upravil data přes dibi tak ted to chci vypsat tak sem dal
$id=1;
  $vysledek=dibi::query('SELECT * FROM [text] WHERE [id] = %i', $id);
  foreach ($vysledek as $n => $row) {
    print_r($row);
    echo $row["at_text"];
    echo $row["cz_text"];
  }
  unset($vysledek);

ale mám to nejspíš blbě :(
Majkl578
Profil
dibi je zbytecnost, pokud nedelas velke veci (i tak doporucuji udelat vlastni)

to co potrebujes udelas jednoduse takto:
$data = mysql_real_escape_string('<object height="300" width="300">
<param name="movie" value="http://server_videa/player/">
<param name="flash" value="id='.$vid.'&style=sal">
<embed src="http://server_videa/?id='.$vid.'&style=sal" type="application/x-shockwave-flash" height="300" width="300">
</object>');
mysql_query('INSERT INTO `videa` SET id = NULL, video = "'.$data.'"';

vypis:
po query musis vysledek prvne "extrahovat"
$query = mysql_query('SELECT * FROM [text] WHERE [id] = "'.mysql_real_escape_string($id).'"'); //nevim co ma byt [text] a [id], ale budiz
$row = mysql_fetch_assoc($query); //ulozi data do promenne $row kde klic pole je nazev sloupce v tabulce
print_r($row);
echo $row["at_text"];
echo $row["cz_text"];
mysql_free_result($query);
pmg
Profil
šárinka
Kód vypadá dobře, co to (ne)dělá? Print_r vydumpuje všechny položky, ale to asi víš. V tom poli $row by měly být jednotlivé sloupce.


Majkl578
Nerad bych začínal flamewar, ale pokud tedy děláš velké věci, proč je podle tebe lepší psát si vlastní? David má s PHP dlouholeté zkušenosti, už předtím zkoušel různé metody přístupu k databázi, než se dostal k dibi. Těžko uděláš kód, který by byl tak malý, rychlý a umožňoval ti psát přehledné a bezpečné příkazy pohodlně.

Co se týče menších projektů, v poslední době se často preferuje ušetřený čas programátora před pikosekundou při provádění kódu. Každý projekt se může časem rozrůst, a když máš možnost modifikací jedné proměnné vyměnit databázi, aby fungovaly i odlišné implementace základních modifikátorů, jedině se to hodí.
šárinka
Profil
pmg
Vypíše mi to pouze Array ( [id] => 1 [cz_text] => [at_text] =>), ale nevypíše mi to ten text co mám v db uložený
pmg
Profil
Čoveče, to spíš vypadá, že to v té databázi není uložené. To by to nevypsalo ani názvy těch sloupců. Můžeš to prověřit z phpmyadmina?
šárinka
Profil
můžu právě se do něj dívám a v sloíupci cz_text nic nemám to tak já být ale v at_text má uloženej kód přehrávače
pmg
Profil
Vyřešili jsme to přes ICQ.

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: