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: MySQL - vkládání záznamu do tabulky

Aktivity
Avatar
user
Tvůrce
Avatar
user:1.5.2012 14:25

Potřebuji si vytvořit do databáze tabulku kam budu do dvou sloupců zapisovat hodnoty.
Napsal jsem to takhle:

$spojeni = mysql_connect('localhost','root','');
          mysql_select_db('databaze',$spojeni);
          mysql_query("CREATE TABLE names_kategories (name_s_dk VARCHAR(20), name_bez_dk VARCHAR(20))",$spojeni);
          $notation_names = mysql_query("INSERT INTO names_kategories (name_s_dk, name_bez_dk) VALUES ('žába','zaba')",$spojeni);

Připojení proběhne úspěšně, tabulka se vytvoří, ale z nějakého mě neznámého důvodu se žádné hodnoty do tabulky nazapíšou... Práva mám "všechny".

Zkoušel jsem zápis:
$notation_names = mysql_query("INSERT INTO names_kategories VALUES (name_s_dk, žába)",$spojeni);
          $notation_names_druhy = mysql_query("INSERT INTO names_kategories VALUES (name_bez_dk, zaba)",$spojeni);

Ale bez výsledku... :(
Nevíte někdo prosím kde dělám chybu...

 
Odpovědět
1.5.2012 14:25
Avatar
Kit
Tvůrce
Avatar
Kit:1.5.2012 14:49

Však si nechej vypsat chybové hlášení, z toho to většinou bývá patrné.

Chybějící středník za SQL dotazem by dnes už neměl vadit, ale v minulosti to bývalo zdrojem podobných potíží.

Také je dobré jako první SQL dotaz napsat
SET NAMES UTF8;
Záleží však na použitém kódování.

Nahoru Odpovědět
1.5.2012 14:49
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
user
Tvůrce
Avatar
user:1.5.2012 16:28

Však to už jsem samozřejmě udělal, problém je vtom že žádná chyba nenastane... Vše jakoby bylo vše v pořádku...

if ($notation_names !== FALSE) {
  ....
} else {
  die ("Nelze vytvořit kategorii: ". mysql_error());

Nikdy neskočí do větve else....

 
Nahoru Odpovědět
1.5.2012 16:28
Avatar
Kit
Tvůrce
Avatar
Odpovídá na user
Kit:1.5.2012 18:19

Sice tento zastaralý ovladač MySQL už nepoužívám, ale v návodech jsem vyhrabal, že je nutné místo testu návratové hodnoty otestovat výsledek mysql_errno(). Asi takto:

$result = mysql_query("SQL dotaz;", $spojeni);
if (mysql_errno()) {
   echo mysql_errno() . ": " . mysql_error() . "\n";
}
Nahoru Odpovědět
1.5.2012 18:19
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 user
Kit:1.5.2012 18:23

A ještě něco: Nikdy nepoužívej funkci die(). Tato funkce se používá pouze v učebnicích.

Nahoru Odpovědět
1.5.2012 18:23
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
user
Tvůrce
Avatar
user:1.5.2012 19:35

Žádná chyba => mysql_errno() vrací nulu :(
Ale jinak díky.

 
Nahoru Odpovědět
1.5.2012 19:35
Avatar
Kit
Tvůrce
Avatar
Odpovídá na user
Kit:1.5.2012 19:45

V tom případě vidím chybu v definované znakové sadě. Implicitně je v MySQL přednastavena tuším norská - pro nás nepoužitelná.

Nahoru Odpovědět
1.5.2012 19:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na user
David Hartinger:1.5.2012 19:52

Nemusí mít tabulka náhodou primární klíč, aby se do ní dalo něco vložit? Jinak by stálo za pokus ladit dotazy přímo v administrační konzoli (tedy v PHPMyAdminovi nebo něčem takovém) než v PHP, konzole ti tu chybu na sto procent napíše. My také nejprve ladíme v konzoli a až poté píšeme výsledek do PHP, ušetříš si tím mnoho problémů.

Nahoru Odpovědět
1.5.2012 19:52
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:1.5.2012 20:09

Primární klíč je potřebný až od 2NF. V MySQL se dá bez problémů používat i 0NF, tedy bez primárního klíče.

Administrační konzole je fajn. Určitě je lepší, než phpMyAdmin. Dá se v ní udělat úplně cokoli, co MySQL umí.

Jinak jsem se spletl, defaultní znaková sada je švédská. Je nutné ji změnit, jinak nepůjdou vkládat řetězce s českými znaky.

Nahoru Odpovědět
1.5.2012 20:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
user
Tvůrce
Avatar
user:1.5.2012 20:24

Hmm právě že jsem to dělal v jednom programu pro práci s databází (sem jsem to přepsal do php podoby) a ten program to vždy po... Teď jsem to udělal v php a PHPMyAdminovi = > tam to všechno jde... Takže to byl ten debilní program! (ztrávil jsem nad tím celý den :@ ). Ale mohu mít ještě jednu otázku? Ta už nejspíše bude mojí vinou...
Pokud vyberu záznam:

$jmeno_s_dk = mysql_query("select name_s_dk from names_kategories where name_bez_dk='zaba'",$spojeni);

A následně ho vypíšu (echem), tak se mi záznam vypíše v podobě "resource id#13" , druhý záznam pak "resource id#14". V čem dělám chybu...

 
Nahoru Odpovědět
1.5.2012 20:24
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na user
David Hartinger:1.5.2012 20:31

Záznamy musíš fatchovat, nejsou z té databáze v takové podobě, abys s nimi mohl hned pracovat - viz PHP tutoriály.

Nahoru Odpovědět
1.5.2012 20:31
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na user
Kit:1.5.2012 20:43

Takže to byla ta nevhodná znaková sada.

Proto místo proměnných se zavádějícím názvem $jmeno_s_dk používám vždy název $result. Je to totiž jen výsledek dotazu, který však neobsahuje data. Ta získáš až funkcí

$row = mysql_fetch_assoc($result);

kterou pro více řádek musíš volat v cyklu.

V novějších ovladačích MySQL je možné celý výsledek stáhnout naráz.

Nahoru Odpovědět
1.5.2012 20:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
user
Tvůrce
Avatar
Odpovídá na Kit
user:1.5.2012 21:39

V tom programu jsem právě měl nastavené kódování utf8 czech jako všude jinde takže tím to asi nebylo, je mi to záhadou... Ale jinak vám děkuji za pomoc, ušetřili jste mě několikahodinovému "trápení" :)

 
Nahoru Odpovědět
1.5.2012 21:39
Avatar
Kit
Tvůrce
Avatar
Odpovídá na user
Kit:2.5.2012 12:36

Ale to o nastavení kódování jsi tady nenapsal a ani z toho uvedeného zdrojáku to není patrné.

A my abychom věštili z křišťálové koule.

Nahoru Odpovědět
2.5.2012 12:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 14 zpráv z 14.