Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
discount week 30 halloween
Avatar
Josef Šlejtr:28.4.2020 10:12

Připojit se v jednom souboru php zároveň nejdříve k jedné databázi a potom k druhé databázi My SQL

Zkusil jsem: Když zakomentuji připojení k první databázi a nechám druhé připojení k databázi běžet, chybu to nehlásí. Stejně tak opačně. Pokud ale nechám zároveň připojení k první a k druhé databázi, hází mí to chybu. Prý nelze dohledat tabulku z druhé databáze, ale přijde mi že ji hledá v databázi první. Domníval jsem se, že není nutné se z databáze odhlašovat, že se odhlásí samo a mohu se připojovat k další databázi.

Chci docílit: Chci čerpat data ze dvou databázi do jednoho PHP souboru

 
Odpovědět
28.4.2020 10:12
Avatar
Patrik Valkovič
Člen IT Redactor Gang
Avatar
Odpovídá na Josef Šlejtr
Patrik Valkovič:28.4.2020 10:56

Ahoj. Můžeš využít například PDO a vytvořit si dvě připojení: https://www.php.net/…-connect.php
Podobným způsobem funguje i mysql_connect (ale ten nedoporučuji používat): https://www.php.net/…-connect.php
Prostě si výsledek uložíš do dvou proměnných a podle toho, kterou databázi chceš použít, takovou proměnnou použiješ.
Podobně můžeš pracovat i s PDO: https://www.php.net/…onstruct.php

Nahoru Odpovědět
28.4.2020 10:56
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Josef Šlejtr:28.4.2020 11:09

Používám databázový wraper stažený tady odtud z www.devbook.cz

 
Nahoru Odpovědět
28.4.2020 11:09
Avatar
Odpovídá na Patrik Valkovič
Josef Šlejtr:28.4.2020 11:13

Zkusím nastudovat a děkuji. Jsem začátečník

 
Nahoru Odpovědět
28.4.2020 11:13
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:28.4.2020 12:14

Pridej konkretni odkaz, stranku, kod toho wraperu. Ten link nefunguje. Nezobrazi mi to zadny kod.

Obvykle se ten prikaz jmenuje napr mysql_connect, mysql_disconnect.
Obvykle se pouziva jedno pripojeni, pak se to nemusi psat do sql prikazy. Ale kdyz chces pouzit obe, sql prikaz umoznuze pridat link na sql connect.

$con1 = mysql_connect(...);
$con2 = mysql_connect(...);
$result1 = mysql_query($query, $con1);
$result2 = mysql_query($query, $con2);
$result = mysql_query($query); // a zapsano takhle by to mohlo dat prvni pripojeni
// nebo druhe, pokud mas 2 otevrena a uvazuje-li to posledni otevrene.
// Ted si presne nevybavim, jak je to v dokumentaci php.net/mysql_query
 
Nahoru Odpovědět
28.4.2020 12:14
Avatar
Josef Šlejtr:28.4.2020 12:45
<?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, $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
28.4.2020 12:45
Avatar
Josef Šlejtr:28.4.2020 12:47

To je ten wraper

 
Nahoru Odpovědět
28.4.2020 12:47
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:28.4.2020 15:06

Nepocita s vice pripojenimi ani transekcemi. Ale muzes jej preci vytvorit 2x.

$sql1 = new Db;
$sql1->connect(...);
$sql2 = new Db;
$sql2->connect(...);

A disconnect tam vubec nema. To je hodne zjednodusena verze vhodna pouze pro jedinou ulohu, pro kterou byla vytvorena. Pro zadne jine pouziti neni vhodna.

self::$connection = null;
 
Nahoru Odpovědět
28.4.2020 15:06
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.