Diskuze: PHP: Jednoduché vložení do databáze

PHP PHP PHP: Jednoduché vložení do databáze American English version English version

Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Zdravím,
pracuji na tutoriálu pro XNA, skóre je odesláno ještě s přezdívkou a dalšími daty v get parametru PHP skriptu. Ten data zapíše do databáze. Další PHP skript vrací skóre jako XML, další ho vypisuje jako HTML tabulku.

Snažím se najít co nejjednodušší, pravděpodobně procedurální a nejkratší způsob, jak skripty napsat.

Chtěl jsem to udělat pomocí vkládání mysl_real_esca­pe_string, ale kód to hrozně nafouklo a bylo to opravdu ošklivé. Potom jsem to chtěl dělat přes mysqli_prepare a parametry, to jsem našel mizerně zdokumentované a výsledek opět moc nepřipomíná MySQL dotaz. Nevím jak tohle vypadá s PDO.

Umí PDO nebo MySQLi vložit data ze slovníku? Něco jako query('INSERT INTO skore', $array); ?

Díky za případné návrhy.

Odpovědět 9.9.2012 19:07
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:
$data=array($par1,$par2,$par3);
$insert=$pdo->prepare("INSERT INTO skore VALUES (?,?,?)");
$insert->execute($data);

Ale netuším, jak bych to dělal procedurálně. Ten SQL dotaz by šel i poskládat podle slovníku, ale buď to bude komplikované, anebo krátké a stěží pochopitelné, např:

$sql="INSERT INTO skore (".implode(',',array_keys($data)).") VALUES (".implode(',',array_fill(0,sizeof($data),"?")).")";

Zpravidla však vím, jaká data vkládám a proto takové šílenosti nedělám.

Nahoru Odpovědět 10.9.2012 12:36
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 Kit
David Čápka:

To první vypadá opravdu dobře. Ono to samo pozná typ v tom poli a dle toho tam dá uvozovky, odescapuje nebo nechá číslo být? Někdy lituji, že jedeme na té Dibi ;( Někdy určitě přejdeme na PDO, tam jde foreach ale až od PHP 5.4 myslím, to ještě nemáme.

Nahoru Odpovědět 13.9.2012 13: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 David Čápka
Kit:

Do SQL dotazu se ta data vůbec nevkládají. SQL server obdrží samostatně dotaz a zvlášť data. Escapování se tedy neřeší a uvozovky už vůbec ne. Dokonce se tím dají obejít limity délky SQL dotazu, což byl problém například při ukládání fotek a videa přímo do tabulky. Data se přenáší binárně.

Cyklus foreach mi v PDO fungoval vždy, podle dokumentace je to od verze PHP 5.1.

PDO považuji za kvalitně zjednodušené ORM. Stačilo k ovladači doplnit pár objektových funkcí a odpadla spousta problémů. PDO dokonce umí data nacpat přímo do objektu. A podle mých měření je i o něco rychlejší, než standardní ovladač.

Nahoru Odpovědět  +1 13.9.2012 16: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 4 zpráv z 4.