Diskuze: MySQL - vkládání záznamu do tabulky

PHP PHP MySQL - vkládání záznamu do tabulky American English version English version

Avatar
user
Redaktor
Avatar
user:

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
Redaktor
Avatar
Kit:

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
Redaktor
Avatar
user:

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
Redaktor
Avatar
Odpovídá na user
Kit:

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
Redaktor
Avatar
Odpovídá na user
Kit:

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
Redaktor
Avatar
user:

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

 
Nahoru Odpovědět 1.5.2012 19:35
Avatar
Kit
Redaktor
Avatar
Odpovídá na user
Kit:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na user
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

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
Redaktor
Avatar
user:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na user
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na user
Kit:

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
Redaktor
Avatar
Odpovídá na Kit
user:

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
Redaktor
Avatar
Odpovídá na user
Kit:

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.