Diskuze: připojení databáze
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, heslo sem samo změnil.
Zdroj je celý komplet zde v tvorbě pro začátečníky. Zde je originál
<?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');
}
}
}
Jaký kód máš v index.php? http://quickbuy.cz/Db.php žádnou chybu nevypisuje, takže by mohlo být něco špatně jinde... (Ve výpisu chyby navíc vidím nějaké "root", to by tam nemělo být.)
index je zde
require('Db.php');
Db::connect('wm46.wedos.net', 'w52393_pes', 'xxxxxxx', '');
if (isset($_GET['clanek']))
$url = $_GET['clanek'];
else
$url = 'uvod';
$clanek = Db::queryOne('
SELECT *
FROM clanky
WHERE url=?
', $url);
if (!$clanek)
{
if ($url != 'chyba')
{
header('Location: index.php?clanek=chyba');
exit();
}
else
die('Nebyl nalezen chybovy clanek');
}
?>
<!DOCTYPE html>
<html lang="cs-cz">
<head>
<meta charset="utf-8" />
<meta name="description" content="<?=
htmlspecialchars($clanek['popisek']) ?>" />
<meta name="keywords" content="<?=
htmlspecialchars($clanek['klicova_slova']) ?>" />
<link rel="shortcut icon" href="obrazky/ikona.ico" />
<link rel="stylesheet" href="styl.css" type="text/css" />
<title><?= htmlspecialchars($clanek['titulek'])
?></title>
</head>
<body>
<header>
<div id="logo"><h1>HoBi</h1></div>
<nav>
<ul>
<li><a href="index.php?clanek=uvod">Domů</a></li>
<li><a href="clanky.php">Články</a></li>
<li><a
href="index.php?clanek=kontakt">Kontakt</a></li>
</ul>
</nav>
</header>
<article>
<div id="centrovac">
<header>
<h1><?= htmlspecialchars($clanek['titulek']) ?></h1>
</header>
<section>
<?= $clanek['obsah'] ?>
</section>
<div class="cistic"></div>
</div>
</article>
<footer>
Vytvořil ©HoBi 2013 pro <a
href="http://devbook.cz">DEVBOOK.CZ</a>
<a href="administrace.php">Administrace</a>
</footer>
</body>
</html>
Zobrazeno 6 zpráv z 6.