Chci geek triko! Chci geek triko!
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

Diskuze: Pouzitie db v php appke

PHP PHP Pouzitie db v php appke American English version English version

Aktivity (1)
Avatar
Mego
Člen
Avatar
Mego:19. září 5:08

Otazka sa tyka pouzitia databazy mysql v raw php appke

Zkusil jsem: Doteraz som vzdy riesil databazy v nejakom systeme, trebars v laraveli cez query builder, kde som len zadal udaje db a viac som sa nestaral, ze sko to funfuje vnutri

Chci docílit: V minulosti, ked este boli na svete mysql funkcie, existovalo nieco ako mysql_pconnect, co sposobilo permanentne pripojenie na databazu. Takze
$db = mysql_pconnec­t(xxx,xxx,xxx,xxx) a vsade inde v appke som dal $query= mysql_query a fungoval som. Appka vedela, ze ma pouzit pconnect a vsetko fungovalo ako ma.
Dnes ked je mysqli, alebo PDO, uz to takto nefunguje. Ziaden permanent connect na mysqli som nenasiel, vzdy treba odkazovat v mysqli_query na connection, co podla mna znamena, ze pri kazdom jednom query sa vytvori novy connect na databazu, co je podla mna zbytocne. Navyse ak connection potrebujem mat dostupne vsade a toto neviem docielit.

Odpovědět 19. září 5:08
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:19. září 9:03

'pri kazdom jednom query sa vytvori novy connect'
Nnn. Funguje to porad stejne. Jenom ty to mas asi v kodu divne napsane. Proto jsme ti radili, udelej si vlastni sql class, u ktere presne vis, jaky vystup ti hodi. Bohuzel, a peru se s tim i ja, kazda konstrukce sql pouziva php prikazy uplne jinak, nema kompatibilni reseni s ostatnimi. Takze, pak musis kvuli tomu prepsat cely program, pokud nemas vlastni class na to.

Muzu ti dat priklady, co tu mam, moje nebo jinych na pdo. Ty me mozna nebudou konecnou verzi. Pokazde to pouzivam jinak. Mno, moje ti raci davat nebudu, to by te jen matlo. Neni to moc userfriendly. Musim to odladit. Ale ted prave nemam zadny projekt, kde bych to pouzival. U nas pouzivame pro systemy, na kterych delam oracle a ldap.

<?php

/**
 *             __          __                __
 *        ____/ /__ _   __/ /_  ____  ____  / /__ _________
 *       / __  / _ \ | / / __ \/ __ \/ __ \/ //_// ___/_  /
 *      / /_/ /  __/ |/ / /_/ / /_/ / /_/ / ,< _/ /__  / /_
 *      \__,_/\___/|___/_.___/\____/\____/_/|_(_)___/ /___/
 *
 *
 *      TUTORIÁLY  <>  DISKUZE  <>  KOMUNITA  <>  SOFTWARE
 *
 *      Tento zdrojový kód je souèástí tutoriálù na programátorské
 *      sociální síti WWW.DEVBOOK.CZ
 *
 *      Kód mùžete upravovat jak chcete, jen zmiòte odkaz
 *      na www.devbook.cz :-)
 *
 *  Jednoduchý databázový wrapper nad PDO
 */
class Db
{
        /**
         * @var PDO Databázové spojení
         */
        private static $connection;

        /**
         * @var array Výchozí nastavení ovladaèe
         */
        private static $options = array(
                PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
                PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
                PDO::ATTR_EMULATE_PREPARES => false,
        );

        /**
         * Pøipojí se k databázi pomocí daných údajù
         * @param string $host Název hostitele
         * @param string $database Název databáze
         * @param string $user Uživatelské jméno
         * @param string $password Heslo
         */
        public static function connect($host="localhost", $database="sdh", $user="root", $password="21123mysqlRoot")
//      public static function connect($host="localhost", $database="sdh", $user="sdh", $password="wtnechcm")
//      public static function connect($host, $database, $user, $password)
                {
                if (!isset(self::$connection)) {
                        $dsn = "mysql:host=$host;dbname=$database";
                        self::$connection = new PDO($dsn, $user, $password, self::$options);
                }
        }

        /**
         * Spustí dotaz a vrátí PDO statement
         * @param array $params Pole, kde je prvním prvkem dotaz a dalšími jsou parametry
         * @return \PDOStatement PDO statement
         */
        private static function executeStatement($params)
        {
                $query = array_shift($params);
                $statement = self::$connection->prepare($query);
                $statement->execute($params);
                return $statement;
        }

        /**
         * Spustí dotaz a vrátí poèet ovlivnìných øádkù. Dále se pøedá libovolný poèet dalších parametrù.
         * @param string $query Dotaz
         * @return int Poèet ovlivnìných øádkù
         */
        public static function query($query) {
                $statement = self::executeStatement(func_get_args());
                return $statement->rowCount();
        }

        /**
         * Spustí dotaz a vrátí z nìj první sloupec prvního øádku. Dále se pøedá libovolný poèet dalších parametrù.
         * @param string $query Dotaz
         * @return mixed Hodnota prvního sloupce z prvního øádku
         */
        public static function querySingle($query) {
                $statement = self::executeStatement(func_get_args());
                $data = $statement->fetch();
                return $data[0];
        }

        /**
         * Spustí dotaz a vrátí z nìj první øádek. Dále se pøedá libovolný poèet dalších parametrù.
         * @param string $query Dotaz
         * @return mixed Pole výsledkù nebo false pøi neúspìchu
         */
        public static function queryOne($query) {
                $statement = self::executeStatement(func_get_args());
                return $statement->fetch(PDO::FETCH_ASSOC);
        }

        /**
         * Spustí dotaz a vrátí všechny jeho øádky jako pole asociativních polí. Dále se pøedá libovolný poèet dalších parametrù.
         * @param string $query Dotaz
         * @return mixed Pole øádkù enbo false pøi neúspìchu
         */
        public static function queryAll($query) {
                $statement = self::executeStatement(func_get_args());
                return $statement->fetchAll(PDO::FETCH_ASSOC);
        }

        /**
         * Umožòuje snadné vložení záznamu do databáze pomocí asociativního pole
         * @param string $table Název tabulky
         * @param array $data Asociativní pole, kde jsou klíèe sloupce a hodnoty hodnoty
         * @return int Poèet ovlivnìných øádkù
         */
        public static function insert($table, $data) {
                $keys = array_keys($data);
                self::checkIdentifiers(array($table) + $keys);
                $query = "
                        INSERT INTO `$table` (`" . implode('`, `', $keys) . "`)
                        VALUES (" . str_repeat('?,', count($data) - 1) . "?)
                ";
                $params = array_merge(array($query), array_values($data));
                $statement = self::executeStatement($params);
                return $statement->rowCount();
        }

        /**
         * Umožòuje snadnou modifikaci záznamu v databázi pomocí asociativního pole
         * @param string $table Název tabulky
         * @param array $data Asociativní pole, kde jsou klíèe sloupce a hodnoty hodnoty
         * @param string $condition Øetìzec s SQL podmínkou (WHERE)
         * @return mixed
         */
        public static function update($table, $data, $condition) {
                $keys = array_keys($data);
                self::checkIdentifiers(array($table) + $keys);
                $query = "
                        UPDATE `$table` SET `".
                        implode('` = ?, `', array_keys($data)) . "` = ?
                        $condition
                ";
                $params = array_merge(array($query), array_values($data), array_slice(func_get_args(), 3));
                $statement = self::executeStatement($params);
                return $statement->rowCount();
        }

        /**
         * Vrátí poslední ID posledního záznamu vloženého pomocí INSERT
         * @return mixed Id posledního záznamu
         */
        public static function getLastId()
        {
                return self::$connection->lastInsertId();
        }

        /**
         * Ošetøí string proti SQL injekci
         * @param string $string Øetìzec
         * @return mixed Ošetøený øetìzec
         */
        public static function quote($string)
        {
                return self::$connection->quote($string);
        }

        /**
         * Zkontroluje, zda identifikátory odpovídají formátu identifikátorù
         * @param array $identifiers Pole identifikátorù
         * @throws \Exception
         */
        private static function checkIdentifiers($identifiers)
        {
                foreach ($identifiers as $identifier)
                {
                        if (!preg_match('/^[a-zA-Z0-9\_\-]+$/u', $identifier))
                                throw new Exception('Dangerous identifier in SQL query');
                }
        }
}
 
Nahoru Odpovědět  +1 19. září 9:03
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 2 zpráv z 2.