Diskuze: php PDO dva zpusoby

PHP PHP php PDO dva zpusoby American English version English version

Aktivity (1)
Avatar
Samuel Kodytek
Redaktor
Avatar
Samuel Kodytek:8.9.2013 7:08

Ahoj nedavno jsem narazil u php PDO na dva prikazy jen ted nevym jakej je vic bezpecnejsi.

Priklad #1:

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

A pak je ten klasickej Priklad #2:

$dotaz = $connection->prepare('INSERT
INTO `user`(`user`,`heslo`)
VALUES(?, ?)');
$parametry = array($jmeno, $heslo);

Tak je mezi nemi nakej rozdil v bezpecnosti webu? :)

Odpovědět 8.9.2013 7:08
Programming is thinking, not typing.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Samuel Kodytek
David Čápka:8.9.2013 8:47

Bezpečné jsou stejně :)

Nahoru Odpovědět 8.9.2013 8:47
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 Samuel Kodytek
Kit:8.9.2013 8:54

Ohledně bezpečnosti jsou rovnocenné, raději však používám druhý způsob. Pole s parametry však dávám přímo jako parametr metody execute(), protože se mi to tak nejvíc líbí.

Pokud mám SQL dotaz na více řádcích, používám Heredoc.

$dotaz = $connection->prepare(<<<EOT
INSERT INTO `user` (`jmeno`, `heslo`) VALUES (?, ?)
EOT
);
$dotaz->execute(array($jmeno, $heslo));

Je to jen příklad odvozený z tvého. Ve skutečnosti bych si nedovolil ukládat do databáze nešifrovaná hesla.

Nahoru Odpovědět 8.9.2013 8:54
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:8.9.2013 9:01

Mám dojem, že ten 2. způsob bugoval při vložení parametru klauzuli LIMIT, nevím, jestli to už opravili. Nikdy jsem se s tím nesetkal, ale pár lidí to tu psalo.

Nahoru Odpovědět 8.9.2013 9:01
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:8.9.2013 9:17
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
Nahoru Odpovědět 8.9.2013 9:17
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:8.9.2013 9:37

Zajímavý atribut, díky. K produkčnímu využití PDO se teprve chystám, zatím jsem ho jen učil :)

Nahoru Odpovědět 8.9.2013 9:37
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:8.9.2013 9:40

Také jsem ten atribut dodnes neznal. Díky za dotaz.

Editováno 8.9.2013 9:41
Nahoru Odpovědět 8.9.2013 9:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Samuel Kodytek
Redaktor
Avatar
Samuel Kodytek:8.9.2013 10:02

Dekuji :)

Nahoru Odpovědět 8.9.2013 10:02
Programming is thinking, not typing.
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 8 zpráv z 8.