Diskuze: Odpojení od databáze a připojení k druhé
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
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
Používám databázový wraper stažený tady odtud z www.devbook.cz
Zkusím nastudovat a děkuji. Jsem začátečník
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
<?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');
}
}
}
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;
Zobrazeno 8 zpráv z 8.