Diskuze: nefunguije vkldávání do databáze

Ostatní jazyky SQL SQL a databáze nefunguije vkldávání do databáze

Avatar
albertpatera
Redaktor
Avatar
albertpatera:

Ahoj,
není nějaký limit, který určuje maximální počet sloupců v tabulce? Mám následující kód:

include ("connect.php");
$title_articles = $_POST['title_articles'];
$describe_articles = $_POST['describe_articles'];
$author_articles = $_POST['author_articles'];
$url_articles = $_POST['url_articles'];
$ip_articles = $_SERVER['REMOTE_ADDR'];
$view = '1';
$zaznam = mysql_query("INSERT INTO articles SET title_articles='$title_articles', describe_articles='$describe_articles', author_articles='$author_articles', ip_articles='$ip_articles', view='1' ;");

Totiž u téhle tabulky se ty zapis do databáze nevloží, ale u tabulky, která má méně sloupců, tak se mi vloží. Není to nějak ovlivněno počtem sloupců v databázi? Pak mám na zadávání dat do databáze samozřejmě ještě formulář.
Mám úplně ten samej styl kódu a jiný tabulky a funguje to, nevíte, co s tím?
Zajímavý je to, že mi to ani nevyhodí žádnou chybu :-(.
Díky ;-)

 
Odpovědět 27.10.2013 11:36
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na albertpatera
Petr Nymsa:

Používáš zastaralý ovladač k DB. Mrkni se na PDO, pracuje se s ním mnohem líp. Na SQL a PHP nejsem opravdu guru, ale mám takový dojem že ti tady může vzniknout nádherná SQL injekce.

K samotnému problému ti asi moc neporadím. Ale myslím, že limit na sloupce neexistuje

Nahoru Odpovědět  +1 27.10.2013 11:40
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
albertpatera
Redaktor
Avatar
Odpovídá na Petr Nymsa
albertpatera:

ale tak jaktože mi to v jiných tabulkách jde? mají teda míň těch sloupců, ale jde to. Každopádně díky. Na ten ovladač se kouknu.

Kdyžtak, kdyby tgo nešlo, tak to rozdělim holt do dvou tabulek :D

 
Nahoru Odpovědět 27.10.2013 11:57
Avatar
Kit
Redaktor
Avatar
Odpovídá na albertpatera
Kit:

Počet sloupců v tabulce je omezen na 4096, ale běžný limit pro vývojáře je 30. Větší počet obvykle svědčí o chybě v návrhu, je zcela běžné mít v tabulce 2-10 sloupců.

O injekci už byla zmínka, místo

$title_articles = $_POST['title_articles'];

dej alespoň

$title_articles = mysql_real_escape_string($_POST['title_articles']);

apod.

Tipl bych si, že jsi při CREATE DATABASE zapomněl na auto_increment u primárního klíče. Chybu to nevyhodí zřejmě proto, že se ji ani nepokoušíš zachytit a vypsat.

A ještě něco: Čísla se do apostrofů nedávají. Je to zlozvyk z MySQL, které to toleruje.

Nahoru Odpovědět 27.10.2013 11:59
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
albertpatera
Redaktor
Avatar
Odpovídá na Kit
albertpatera:

díky, qsl injekci opravim....ale A_I jsem zaskrtnout nezapomnel.
4096b sloupců v tabulce opravdiu nemám :D. Zkusim ještě to roozdělit do dvoui tabulek a uvidim :-)
Ale zatim :-)

 
Nahoru Odpovědět 27.10.2013 12:26
Avatar
Kit
Redaktor
Avatar
Odpovídá na albertpatera
Kit:

"zaskrtnout"? To je divné. A tu detekci chyb sis tam už udělal?

Nahoru Odpovědět 27.10.2013 12:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na albertpatera
Kit:

Stejně si nemohu zvyknout na ty pleonasmy v názvech sloupců. Proč máš v každém sloupci i název tabulky? Pochopil bych to, kdybys používal NATURAL JOIN nebo alespoň USING, ale jen u klíčových sloupců.

Proč se ta tabulka jmenuje "articles" a ne "article"? Máš snad v jednom řádku víc článků?

Editováno 27.10.2013 12:40
Nahoru Odpovědět 27.10.2013 12:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
albertpatera
Redaktor
Avatar
Odpovídá na Kit
albertpatera:

Ahoj, ještě jsem to neopravil.
to article tam mám to to, že v databázi mám víc tabulek se stejnými sloupci,tak aby to nebylo duplicitní :-)

 
Nahoru Odpovědět 27.10.2013 13:14
Avatar
Kit
Redaktor
Avatar
Odpovídá na albertpatera
Kit:

Duplicita názvů sloupců v různých tabulkách ničemu nevadí. Navíc je v SQL dotazu můžeš kdykoli přejmenovat podle potřeby.

Nahoru Odpovědět  +1 27.10.2013 13:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
albertpatera
Redaktor
Avatar
Odpovídá na Kit
albertpatera:

Tak jsem se na to vrhl..a stačilo teda vymazat pár sloupců z s tabulky, které jsem tam měl navíc, takže bez těch sloupců se dá obejít.
Měl jsem tak 7 sloupců, teď jich tam mám 4. Fakt nevim čim to může být, když do překročení maximálního limitu sloupců mám ještě dost hodně co dělat :D. Sice to teď funguje, ale stejně mě vrtá hlavou, čím to asi tam může být :D. Dám to tedy do dvou tabulek. Stejně mě to zajímá, čím to asi tak může být :D

 
Nahoru Odpovědět 27.10.2013 20:59
Avatar
Kit
Redaktor
Avatar
Odpovídá na albertpatera
Kit:

Bez chybového výstupu se můžeme jenom dohadovat, co bylo příčinou. Nekompatibilita dat, narušení UNIQUE, ...

Možná bys ten chybový výstup měl konečně udělat.

Editováno 27.10.2013 21:04
Nahoru Odpovědět 27.10.2013 21:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
albertpatera
Redaktor
Avatar
Odpovídá na Kit
albertpatera:

myslíš opravit tu injekci?
Ale tím pádem, kdyby to bylo blbě, tak by mi to nefungovalo i u čtyřech sloupců, nemyslíš?

Samozřejmě to opravím ;-)

 
Nahoru Odpovědět 27.10.2013 21:16
Avatar
Kit
Redaktor
Avatar
Odpovídá na albertpatera
Kit:

Ne. Myslel jsem tím chybový výstup neprovedeného SQL dotazu. Výsledek vůbec netestuješ a divíš se, že se ti SQL dotaz neprovedl.

Nahoru Odpovědět 27.10.2013 21:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
albertpatera
Redaktor
Avatar
Odpovídá na Kit
albertpatera:

Máš pravdu...to taky možná je důsledek toho, proč mi to nejde, takže to taky opravím :-)

 
Nahoru Odpovědět 27.10.2013 21:33
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.