Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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.

Aktivity
Avatar
Neaktivní uživatel:21.4.2013 15:27

Ahoj,
pomocí PhpMyAdmina jsem si exportoval databázi, a teď bych to přes PHP potřeboval do databáze zase vložit, nemá někdo nějaký nápad, jak ?

Odpovědět
21.4.2013 15:27
Neaktivní uživatelský účet
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:21.4.2013 15:45

a proč přes PHP využij opět PhpMyAdmina...

Nahoru Odpovědět
21.4.2013 15:45
Čím víc vím, tím víc věcí nevím.
Avatar
Odpovídá na David Hynek
Neaktivní uživatel:21.4.2013 15:58

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.

Nahoru Odpovědět
21.4.2013 15:58
Neaktivní uživatelský účet
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
David Hynek:21.4.2013 19:54

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á :o)

Nahoru Odpovědět
21.4.2013 19:54
Čím víc vím, tím víc věcí nevím.
Avatar
Odpovídá na David Hynek
Neaktivní uživatel:21.4.2013 21:10

Mužeš to přidat jako dlouhý zdroják
http://www.itnetwork.cz/dev-lighter

Nahoru Odpovědět
21.4.2013 21:10
Neaktivní uživatelský účet
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:21.4.2013 21:46

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š.

Nahoru Odpovědět
21.4.2013 21:46
Čím víc vím, tím víc věcí nevím.
Avatar
Odpovídá na David Hynek
Neaktivní uživatel:22.4.2013 11:58

Pomoc :D
Tak daleko jsem se v PHP ještě nedostal :D

Nahoru Odpovědět
22.4.2013 11:58
Neaktivní uživatelský účet
Avatar
Odpovídá na David Hynek
Neaktivní uživatel:22.4.2013 12:00

..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.

Editováno 22.4.2013 12:03
Nahoru Odpovědět
22.4.2013 12:00
Neaktivní uživatelský účet
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
David Hynek:22.4.2013 13:11

vydrž večer to upravím. pro načtení souboru. jsem tě nepochopil :)

Nahoru Odpovědět
22.4.2013 13:11
Čím víc vím, tím víc věcí nevím.
Avatar
Nahoru Odpovědět
22.4.2013 13:17
Neaktivní uživatelský účet
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
David Hynek:22.4.2013 14:01

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());
Editováno 22.4.2013 14:02
Nahoru Odpovědět
22.4.2013 14:01
Čím víc vím, tím víc věcí nevím.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hynek
Kit:22.4.2013 15:47

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á...

Nahoru Odpovědět
22.4.2013 15:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na Kit
David Hynek:22.4.2013 16:18

rád se přiučím... jinak to zatím neumím :)

Nahoru Odpovědět
22.4.2013 16:18
Čím víc vím, tím víc věcí nevím.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hynek
Kit:22.4.2013 16:31

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.

Nahoru Odpovědět
22.4.2013 16:31
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hynek
Kit:22.4.2013 16:34

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.

Nahoru Odpovědět
22.4.2013 16:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na David Hynek
Neaktivní uživatel:22.4.2013 17:34

Asi je velkej problém, když používám ovladač mysql (....pomocí kterýho je i připojení k databázi), že ?

Nahoru Odpovědět
22.4.2013 17:34
Neaktivní uživatelský účet
Avatar
Odpovídá na David Hynek
Neaktivní uživatel:22.4.2013 17:37

btw. ten soubor má 4,14kb :D
jsou to jen 4 tabulky a celkem asi 15 řádků

Nahoru Odpovědět
22.4.2013 17:37
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:22.4.2013 17:39

Nevidím to jako velký problém. Jen byste asi oba měli přejít na PDO.

Nahoru Odpovědět
22.4.2013 17:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:22.4.2013 17:41

To tam nacpeš i přes clipboard :)

Nahoru Odpovědět
22.4.2013 17:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:22.4.2013 19:05

PDO o tom jsem slyšel, zatím však nezkoušel... zas se bude co učit :)

Editováno 22.4.2013 19:06
Nahoru Odpovědět
22.4.2013 19:05
Čím víc vím, tím víc věcí nevím.
Avatar
Odpovídá na Kit
Neaktivní uživatel:22.4.2013 19:57

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."

Nahoru Odpovědět
22.4.2013 19:57
Neaktivní uživatelský účet
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:22.4.2013 20:49

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...

Nahoru Odpovědět
22.4.2013 20:49
Čím víc vím, tím víc věcí nevím.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:23.4.2013 8:54

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á.

Nahoru Odpovědět
23.4.2013 8:54
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hynek
Kit:23.4.2013 8:57

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ší.

Nahoru Odpovědět
23.4.2013 8:57
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:23.4.2013 10:55

Já je nebudu pouštět do databáze :)
Tak znovu :D
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 :D

Editováno 23.4.2013 10:56
Nahoru Odpovědět
23.4.2013 10:55
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:23.4.2013 12:26

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.

Nahoru Odpovědět
23.4.2013 12:26
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
David Hynek:23.4.2013 15:54

a co tedy vyzkoušet ten kratší script co jsem ti psal?

Nahoru Odpovědět
23.4.2013 15:54
Čím víc vím, tím víc věcí nevím.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 27 zpráv z 27.