Autor | Zpráva | ||
---|---|---|---|
JSvabik Profil |
#1 · Zasláno: 4. 4. 2016, 16:42:19
Dobré odpoledne :),
v PHPku mám třídu, přes niž vykonávám SQL příkazy... A když mám jinou třídu a v ní určité metody, spousta metod začíná $db = new Database; a pak např. $db->select("SELECT * FROM blabla WHERE username = '".$db->mysql_escape_mimic($_POST["usr"])."';"); Nezatěžuje neustálé $db = new Database; zbytečně databázi, resp. databázový server? Poradíte prosím, jak to ošetřit? Třída Database vypadá následovně: <?php class Database { public function select($query) { $dsn = 'mysql:dbname=' . SQL_DBNAME . ';host=' . SQL_HOST . ''; $user = SQL_USERNAME; $password = SQL_PASSWORD; try { $db = new PDO($dsn, $user, $password); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $statement = $db->prepare($query); $statement->execute(); while($row=$statement->fetch()) { return $row; } } catch (PDOException $e) { die('Connection failed: ' . $e->getMessage()); } } public function selectall($query) { $dsn = 'mysql:dbname=' . SQL_DBNAME . ';host=' . SQL_HOST . ''; $user = SQL_USERNAME; $password = SQL_PASSWORD; try { $db = new PDO($dsn, $user, $password); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $statement = $db->prepare($query); $statement->execute(); $result = $statement->fetchAll(); return $result; } catch (PDOException $e) { die('Connection failed: ' . $e->getMessage()); } } public function command($query) { $dsn = 'mysql:dbname=' . SQL_DBNAME . ';host=' . SQL_HOST . ''; $user = SQL_USERNAME; $password = SQL_PASSWORD; try { $pdo = new PDO($dsn, $user, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec($query); } catch (PDOException $e) { die('Connection failed: ' . $e->getMessage()); } } public function mysql_escape_mimic($inp) { if(is_array($inp)) return array_map(__METHOD__, $inp); if(!empty($inp) && is_string($inp)) { return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp); } return $inp; } } |
||
Martin2 Profil * |
#2 · Zasláno: 4. 4. 2016, 16:56:58
JSvabik:
Třídu Database je třeba vzít a smazat. Je v ní špatně úplně všechno. Od připojování k databázi při každém dotazu až po escapování.
Až to uděláš, tak si stáhni dibi nebo případně nette/database. Správný postup je pak třídu připojenou k databázi nevytvářet několikrát, ale už existující jen injektovat do dalších tříd, které s databází chtějí pracovat. |
||
JSvabik Profil |
#3 · Zasláno: 4. 4. 2016, 17:05:59
Děkuji moc, vyřeším
|
||
Časová prodleva: 9 let
|
0