Autor | Zpráva | ||
---|---|---|---|
Sir Tom Profil |
#1 · Zasláno: 30. 1. 2013, 20:03:51
peteo:
„No nič, lúskam, skúšam.“ No a takhle to děláš správně! :D |
||
peteo Profil |
tak poďme na to, hovorím si (teória vytvorenia tabuľka, dátové typy etc.), a ajhľa:
zosmolil som kód <?php mysql_connect("127.0.0.1", "root", ""); mysql_select_db("cotoje"); //pôvodne tu bol chybný názov "cojeto"[#3] echo "Pripojené k databáze cojeto<br>"; $sql = "CREATE TABLE `cotoje`.`kniha` (`id` INT NOT NULL AUTO_INCREMENT, `meno` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `obsah` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `edit` TIMESTAMP NOT NULL, PRIMARY KEY (`id`), UNIQUE (`id`))"; $sql1 = "CREATE TABLE `cotoje`.`alias` (`id` INT NOT NULL, `alias` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL)"; $sql2 = "CREATE TABLE `cotoje`.`odkaz` (`id` INT NOT NULL, `odkaz` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL)"; $sql3 = "CREATE TABLE `cotoje`.`foto` (`id` INT NOT NULL, `foto` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL)"; $sql4 = "CREATE TABLE `cotoje`.`vari` (`id` INT NOT NULL, `vari` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL)"; mysql_query ($sql); mysql_query ($sql1); mysql_query ($sql2); mysql_query ($sql3); mysql_query ($sql4); echo "hotovo"; ?> a čo - nič. OK, hovorím ci, pomeníme tie obrátené apostrofy na obyčajné. A nič. Tak skúsim úvodzovky. Bez efektu. Takže problém je kde? Ďakujem. Pri každom prebehlo vytvorenie bez chýb, iba tabuľky nevznikli. |
||
Petr__ Profil * |
#3 · Zasláno: 31. 1. 2013, 05:08:12
[#2] peteo
Na 3. řádku vybíráte databázi jménem "cojeto" zatímco v těch příkazech pro vytvoření tabulek je vytváříte v databázi jménem "cotoje". To jsou dvě zcela odlišné jména databází. Zbytex syntaxe jsem nezkoumal. |
||
peteo Profil |
ach
ani po odstránení tejto chyby nejde. |
||
juriad Profil |
Věz, že mysql_connect, mysql_select_db i mysql_query mají návratovou hodnotu, která říká, zda se příkaz povedl. Ty nikde netestuješ, zda ses vůbec přípojil k databázi.
Přímo v manuálu je příklad: <?php $link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); if (!$link) { die('Not connected : ' . mysql_error()); } // make foo the current db $db_selected = mysql_select_db('foo', $link); if (!$db_selected) { die ('Can\'t use foo : ' . mysql_error()); } ?> die(mysql_error()) , protože v případě problémů uživatel uvidí jen chybovou hlášku z databáze, ale pro testování to může být užitečné.
|
||
tiso Profil |
#6 · Zasláno: 31. 1. 2013, 09:56:56
peteo: existujú aj iné dátové typy ako int, longtext a timestamp.
„ PRIMARY KEY (`id`), UNIQUE (`id`) “
- primary key je automaticky unique, stačí primary key |
||
peteo Profil |
#7 · Zasláno: 2. 2. 2013, 16:58:35
Dobrý deň,
prosím Vás, pri spustení skriptu na výpis tabuliek databáze mi vypisuje okrem tabuliek (teda to, čo chcem), že funkcia mysql_list_tables() je zastaralá: Deprecated: Function mysql_list_tables() is deprecated Akú (novšiu) funkciu mám teda použiť? Ďakujem. PS: aký má vplyv používanie starších funkcií, keď skript prebehne v poriadku (okrem tej hlášky? Veď na telefonovanie nepotrebujem posledný výkrik mobilnej telefónie, dovolám sa aj so staručkou nokiou. |
||
Rfilip Profil |
To znamená že je funkce zastaralá,spolu s celou skupinou funkcí mysql_*, a že bude brzy z php v nějaké další verzi úplně odstraněna. Použij novejší mysqli.
|
||
shaggy Profil |
#9 · Zasláno: 2. 2. 2013, 17:08:14
peteo:
„aký má vplyv používanie starších funkcií“ Žiadny. Skutočne potrebuješ tú funkciu? Na čo? Ja som ju v živote nepoužil a pri projekte, ako je tvoj, ani nevidím dôvod na jej použitie. A k alternatíve - dôvod, prečo stále nevieš pochopiť veľa základných vecí je ten, že sa iba pýtaš a nevynakladáš vlastné úsilie. Keby si sa len trochu posnažil a otvoril by si si dokumentáciu k tejto funkcii, našiel by si riešenie. |
||
peteo Profil |
#10 · Zasláno: 2. 2. 2013, 17:44:16
shaggy:
Snažím sa urobiť skript, ktorý bude robiť čo ja chcem, takže hľadám a prepínam medzi výkladom SQL, PHP a príkladmi, tak mi tu netvrďte, že sa nesnažím. Čo sa týka dokumentácie, vychádzam z tohto: mysql_list_tables (PHP 3, PHP 4 , PHP 5) mysql_list_tables -- Načte všechny tabulky v MySQL databázi Popis resource mysql_list_tables ( string database [, resource spojeni]) mysql_list_tables() Na základě jména databáze vrací ukazatel výsledku na tabulky přesně tak jako mysql_db_query(). Použítím funkce mysql_tablename() můžete zjistit jména všech tabulek z ukazatele výsledku nebo použít jiné funkce k zjištění dalších informací jako např. mysql_fetch_array(). Parametr database je název databáze, z které se mají číst jména tabulky. Dojde-li k chybě, mysql_list_tables() vrací FALSE. Z důvodů zpětné kompatibility můžete také narazit na funkci mysql_listtables(). Tuto funkci však nedoporučujeme používat, neboť nemusí být již v dalších verzích PHP podporována. Příklad 1. mysql_list_tables Příklad <?php $dbname = 'mysql_dbjmeno'; if (!mysql_connect('mysql_host', 'mysql_uziv', 'mysql_heslo')) { print 'Nelze se spojit'; exit; } $result = mysql_list_tables($dbname); if (!$result) { print "Chyba DB, nelze číst tabulky\n"; print 'MySQL chyba: ' . mysql_error(); exit; } while ($row = mysql_fetch_row($result)) { print "Tabulka: $row[0]\n"; } mysql_free_result($result); ?> Našiel som už iba príkaz SHOW TABLES FROM DATABASE, tak radšej používať ten? (nič nerobím, len hľadám u gúgla, ako má vyzerať zápis tejto funkcie) Teda je v tom pekný bordel, keď konečne nájdem funkciu, ktorú chcem a tu ma zvozíte, že nič nerobím. ach jaj. dôvod, prečo stále nevieš pochopiť veľa základných vecí je ten, že sa iba pýtaš a nevynakladáš vlastné úsilie. Keby existoval editor, ktorý by urobil to čo potrebujem, (a ktorému napíšem toto zober a toto s tým urob), tak si s tým nelámem hlavu. Keďže taký nie je (aspoň o tom neviem), tak si to musím urobiť. Keď si to chcem urobiť, musím sa učiť a SKÚŠAŤ. A keďže skúšam, prechádzam i omylmi, slepými cestičkami. Takže už sa na mňa nehnevajte, nesnažím sa tu otravovať s každou blbosťou (no ako pre koho, že), ale už keď niečo zosmolím a potom mi to napíše takúto vec, tak to dožerie. |
||
shaggy Profil |
#11 · Zasláno: 2. 2. 2013, 17:57:55
peteo:
„Čo sa týka dokumentácie, vychádzam z tohto:“ Prečo si neprečítaš oficiálnu dokumentáciu?! Dal som ti na ňu odkaz a je aj medzi prvými na google, tak mi nehovor, že hľadáš alternatívy. „Našiel som už iba príkaz SHOW TABLES FROM DATABASE, tak radšej používať ten?“ Prečítal si si ten odkaz, ktorý som ti dal? To ti naozaj máme hovoriť (ako 6 ročnému decku), áno milý peteo, urob to presne takto a takto? Zistil si, že mysql_list_tables() je deprecated, pýtaš sa na novšiu funkciu. Dostaneš od nás odkaz na stránku, kde je popísaný lepší postup a ty sa napriek tomu budeš pýtať, či to máš použiť? „Keď si to chcem urobiť, musím sa učiť a SKÚŠAŤ.“ To je správny postup, tak sme to robili všetci. Ale neustále vypytovanie sa na základne veci != učiť a skúšať. Ako som písal, ja som mysql_list_tables nikdy nepoužil. Rovnako ako ty som musel otvoriť Google a/alebo oficiálnu dokumentáciu a rovnako, ako ty, som si tam musel prečítať ako to riešiť "po novom". Rozdiel je v tom, že ja to nepotrebujem a aj tak som to musel urobiť a napísať ti to, kým ty to potrebuješ, ale nevyhľadal si si k tomu nič. Prečo? A k tomu, čo sa snažíš naprogramovať - skutočne potrebuješ zoznam všetkých tabuliek? |
||
peteo Profil |
shaggy:
A k tomu, čo sa snažíš naprogramovať - skutočne potrebuješ zoznam všetkých tabuliek? Samozrejme, budem do nich zapisovať. V podstate sa snažím o jedno: načítať súbor s dátami, ktoré musím rozsekať na názov, alternatívny názov, obsah, fotografiu, odkazy, suvislosti a zaujimavosti a do jednotlivých tabuliek to potom pozapisovať. Preto nech nemusím všade vypisovať tie názvy tabuliek, som chcel použiť inkriminovanú funkciu (vyriešil som to externým súborom, z ktorého sa názvy načítajú, myslel som, že použitím tej funkcie mysql_list_tables() to bude jednoduchšie). ale ako vidím, som na najlepšej ceste sa na to vykašľať. veď to funguje tak, ako to je, tak čo. |
||
Sir Tom Profil |
#13 · Zasláno: 2. 2. 2013, 22:00:53
peteo:
> V podstate sa snažím o jedno: > načítať súbor s dátami, ktoré musím rozsekať na názov, alternatívny názov, obsah, fotografiu, odkazy, suvislosti a zaujimavosti a do jednotlivých tabuliek to potom pozapisovať. Tady ti nerozumím. Hele - zkus si to takhle: Vytvoř si databázi, v ní si vytvoř jenom jednu tabulku. Ta tabulka bude mít jenom 3 sloupce: ID, name, content Naplň si tuto tabulku nějakými údaji (alespoň 10) - to znamená, že každý údaj bude na jednom řádku a těch řádků bude alespoň 10. Např. 1 | Auto | Dopravní prostředek, který slouží k přepravě osob a věcí 2 | Okno | Otvor ve zdi 3 | Myšpulín | Kreslená postava v dětském komiksu Čtyřlístek 4 | Madagaskar | Ostrov u Afriky atakdál... S těmito daty si pak hraj. Přidávej do tabulky nové řádky, hledej údaje v tabulkách, maž řádky, upravuj řádky, vybírej řádky z tabulky. Na to budeš používat MySQL dotazy začínající SELECT, UPDATE, INSERT, REMOVE... (jejich použití si najdi na googlu). mysql_list_tables() opravdu potřebovat nebudeš :) > ale ako vidím, som na najlepšej ceste sa na to vykašľať. > veď to funguje tak, ako to je, tak čo. Ale kdepak! Určitě se na to nevykašli. Z pochopením databází měl problém téměř každý - třeba já jsem se na to 2x vždycky vykašlal a teďka jsem rád, že potřetí jsem se na to už nevykašlal... |
||
peteo Profil |
Dobrý deň, večer, ráno,
Po vložení riadku potrebujem zistiť, aké číslo mu bolo priradené do stĺpca s automatickým číslovaním, aby som do druhej tabuľky mohol vložiť referencie. Pomocou volania príkazu SELECT @@identity získam hodnotu/reťazec Resource id #19, kde #19 nezodpovedá číslu záznamu (riadku), ale je v pomere
záznam = ((Resource id #x)-5)/2 generované kódom: ... while ($text<>$stop) { $text=fgets($soubor); $meno=explode(";",$text); $riadok++; include ("cotoje_conect.php"); $tab_meno="INSERT INTO meno (meno,obsah) VALUES ('".$meno[0]."','".$meno[1]."')"; mysql_query($tab_meno); $meno_id=mysql_query("SELECT @@identity"); echo "záznam č. ".$riadok." >> ".$meno_id; } ... a výstup je: ... záznam č. 4. >> Resource id #13 záznam č. 5. >> Resource id #15 záznam č. 6. >> Resource id #17 ... Ako mám pomocou volania príkazu SELECT @@identity zistiť hodnotu čísla, ktoré bolo priradené záznamu v tabuľke? Sedím nad tým už od obeda. PS: v samotnej vytvorenej tabuľke jednotlivé id zodpovedajú hodnote záznam .
|
||
Sir Tom Profil |
#15 · Zasláno: 3. 2. 2013, 21:37:47
peteo:
„Po vložení riadku potrebujem zistiť, aké číslo mu bolo priradené do stĺpca s automatickým číslovaním“ co třeba http://jonatan.spse.pilsedu.cz/doc/php-man/function.mysql-insert-id.html ? |
||
juriad Profil |
#16 · Zasláno: 3. 2. 2013, 21:44:58
Chces pouzit php funkci mysql_insert_id, ta vrati posledni vygenerovane id. Vypada to ze si zacinas s mysql tykat. :-)
Pisu z mobil, budu se muset podivat na to nabodenickovatko |
||
peteo Profil |
#17 · Zasláno: 3. 2. 2013, 21:58:49
printf ("Posledně vložený záznam má id: %d\n", mysql_insert_id()); vracia 0,
$meno_id2= mysql_query("LAST_INSERT_ID()"); vracia "" (prázdny reťazec)
|
||
juriad Profil |
#18 · Zasláno: 3. 2. 2013, 22:10:51 · Upravil/a: juriad
Tabulka meno tedy nema zadny sloupec, ktery byl mel autoincrement. Zkontroluj jeji strukturu nebo ji sem nakopiruj. Pokud ma jen dva sloupce, tak pridej dalsi s vlastnosti autoincrement, nazvi ho nejspis id.
Jeste poznamka, include s prihlasenim k databazi staci obvykle jen jednou na zacatku skriptu. Presun ho ven z while. |
||
peteo Profil |
juriad:
tabulka bola vytvorená: CREATE TABLE `cotoje`.`meno` ( `id` INT NOT NULL AUTO_INCREMENT , `meno` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `obsah` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , PRIMARY KEY ( `id` ) , UNIQUE ( `id` ) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_bin; do stĺpca id predsa nič nevkladám, tam je AUTO_INCREMENT .
s tým prihlásením som si nebol celkom istý, či pred cyklus alebo do cyklu. díky. |
||
juriad Profil |
#20 · Zasláno: 3. 2. 2013, 23:29:00
Jsi si jistý, že mezi
mysql_query("INSERT ...") a mysql_insert_id() není žádný dotaz do databáze, tzn. řádek 9 předchozího php skriptu jsi nahradil příkazem mysql_insert_id?
|
||
peteo Profil |
#21 · Zasláno: 3. 2. 2013, 23:43:04
mám to!
pri posledných úpravách vypadol riadok mysql_query($tab_meno); (riadok 8 z [#14])
už to funguje. Ďakujem, zasa je na deň možno odo mňa pokoj. |
||
Časová prodleva: 11 let
|
0