Diskuze: Vložení dlouhého kódu do databáze
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 27 zpráv z 27.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
a proč přes PHP využij opět PhpMyAdmina...
Protože to budou vkládat nezkušení uživatelé
Mám svůj redakční systém, který chci publikovat, a tohle je poslední
překážka.
Zdar udělal jsem takový skript na vkládání v PhpMysqlArminu. Dám sem
odkaz a soubor. Jen co zjistím kam se to vkládá )
Mužeš to přidat jako dlouhý zdroják
http://www.itnetwork.cz/dev-lighter
O.K. to jsem nevěděl: tady je odkaz http://www.itnetwork.cz/dev-lighter/90
Je to bez bezpečnostních kontrol. Takže dál si to uprav dle svého. Do scriptu by se ještě měla vložit kontrola, aby tam nebyly příkazy na smazání databáze, nebo nějaké jiné podobné "legrácky" které nechceš.
Pomoc
Tak daleko jsem se v PHP ještě nedostal
..jak se má jmenovat ten soubor ? s tím kódem do SQL ?
EDIT: Aha, ty to máš takhle... No já to mám totiž tak, že ten soubor se SQL se tam nahraje spolu se systémem a je ve složce /install/. Ve složce install je i PHP soubor, který se zeptá uživatele na údaje do MySQL a pak si je sám zapíše do souboru. A právě neevím, jak udělat to, aby zapsal ten kód z toho souboru do databáze.
vydrž večer to upravím. pro načtení souboru. jsem tě nepochopil
Minimalistická verze... počítej, že data o velikosti cca 1Mb se budou ukládat cca 10vteřin (měřeno alespoň u mne na localhostu) Velikost je tam nastavena na 10MB soubor s SQL, nevím jak velký budeš používat.
Nahoře je spuštěn přístup do MySqli, jestli jej máš již spuštěn a předpokládám že ano, tak si to musíš nahoře upravit dle stávajícího...
$mysqli = new mysqli("server", "uzivatel_jmeno", "uzivatel_heslo", "jmeno_databaze");
$mysqli->query("SET GLOBAL max_allowed_packet=10485760");
$sql = file_get_contents("soubor_s_sql.sql");
$mysqli->multi_query($sql);
do {
if ($res = $mysqli->store_result()) {
var_dump($res->fetch_all(MYSQLI_ASSOC));
$res->free();
}
} while ($mysqli->more_results() && $mysqli->next_result());
Možná by to šlo rychleji, kdyby se celá dávka uzavřela do transakčních závorek. I když na MyISAM to asi význam nemá...
Do toho souboru napíšeš na začátek
BEGIN TRANSACTION;
a na konec
COMMIT;
Pokud by mezi nimi bylo víc kódu, rozdělíš to na bloky. Urychlení bývá podle typu databáze zanedbatelné až řádové. Většinou se to vyplatí dělat pro INSERT.
Pro MyISAM se dá použít ještě jeden fígl: Poskládat INSERTy ze samých SELECTů spojených UNION ALL. Takto se dá jedním SQL dotazem vložit více záznamů do jedné tabulky. Chová se to jako transakce.
Asi je velkej problém, když používám ovladač mysql (....pomocí kterýho je i připojení k databázi), že ?
btw. ten soubor má 4,14kb
jsou to jen 4 tabulky a celkem asi 15 řádků
Nevidím to jako velký problém. Jen byste asi oba měli přejít na PDO.
PDO o tom jsem slyšel, zatím však nezkoušel... zas se bude co učit
Přečti si 3. komentář
"Protože to budou vkládat nezkušení uživatelé
Mám svůj redakční systém, který chci publikovat, a tohle je poslední
překážka."
zkus se přihlásit k DB přes ten můj script. Musí fungovat i u tebe, jestli ho máš v PHP povolený. Rozdíl je jen v přístupu k databázi. Mysql je starší verze Mysqli, které je jen více vybavené pro zpracování dat. A jestli tam máš 4kB dat tak to ten můj stávající script překousne ve zlomku vteřiny...
Pouštět nezkušeného uživatele do SQL není rozumný nápad. Z nezkušeného uživatele se snadno může stát záškodník. Databáze se sice proti tomu zabezpečit dá, ale skoro nikdo to nedělá.
SQL dotazy jsou stejné. Vlastně se hodně zjednoduší, protože se do nich nedávají hodnoty proměnných, ale jen otazníčky. S PDO se velmi dobře pracuje objektově, při chybách vyhazuje výjimky, které se ošetřují snáze, než chyby.
Prostě s PDO je práce s databází pohodlnější.
Já je nebudu pouštět do databáze
Tak znovu
Mám redakční systém, po uživateli potřebuju pouze údaje do databáze, kam
se má ten systém připojit (což je normální, to chce každej systém).
Po zadání těch informací se systém připojí a zapíše tam nějaký
základní info - vytvoří tabulky atd.
Jenže nevím, jak to udělat, protože tam je celkem dost úvozovek takže by
to mohlo s tím php blbnout, a taky že jo...
Tak se ptám tu, jestli s tím má někdo zkušenosti.
Pokud si vleze do databáze a něco tam pokazí, to je jeho problém
Pokud to chceš celé SQL vložit přímo do PHP, můžeš použít syntaxi Heredoc. Nějaké uvozovky tě pak přestanou trápit.
a co tedy vyzkoušet ten kratší script co jsem ti psal?
Zobrazeno 27 zpráv z 27.