<?php
$host = 'localhost';
$meno = 'test';
$heslo = 'Wo2mOr0nhBHct6HWfl4H';
try{
//vytvorenie spojenia s MySQL serverom
$spojenie = new mysqli($host, $meno, $heslo);
//kontrola úspešnosti spojenia s MySQL serverom
if ($spojenie->connect_error) {
throw(new Exception('Chyba spojenia: '.$spojenie->connect_error).'<br/>');
}
//výber databázy "test"
if ($spojenie->select_db('test') === TRUE){
/*
vytvorenie tabuľky "tabulka1" ak ešte neexistuje
- používa sa metóda "real_query", pretože SQL dotaz je statický resp. nemenný,
vykoná len raz, ak daná tabuľka neexistuje a navyše neočakávame vrátenie výsledkov
*/
if ($spojenie->real_query(
<<<SQL
CREATE TABLE IF NOT EXISTS `test`.`tabulka1` (
`id` INT NOT NULL AUTO_INCREMENT ,
`nazov` VARCHAR(45) NOT NULL ,
`cena` FLOAT(5,2) NOT NULL DEFAULT 0.0 ,
PRIMARY KEY (`id`) )
ENGINE = MyISAM;
SQL
) === TRUE){
/*
bezpečné vloženie dát do tabuľky "tabulka1"
- používa sa metóda "prepare" na pripravenie dotazu
- pomocou metódy "bind_param" namiesto znakov "?" sa dosadia príslušne pripravené vstupné hodnoty,
ich poradie je zhodné s poradím parametrov
- text "sd" značí, že prvý parameter je textový reťazec a druhý je desatinné číslo
- celý príkaz sa završí metódou "execute", ktorá celý pripravný dotaz vykoná
- pripravený dotaz môžeme vykonať viackrát po sebe, zakaždým s inými vstupnými hodnotami
*/
$nazov = 'produkt1';
$cena = 123.45;
$dotaz1 = <<<SQL
INSERT INTO `test`.`tabulka1` (`nazov`,`cena`) VALUES (?, ?);
SQL;
$prikaz1 = $spojenie->prepare($dotaz1);
if ($prikaz1 !== FALSE){
if ($prikaz1->bind_param('sd',$nazov, $cena) === TRUE){
if ($prikaz1->execute() === TRUE){
echo 'Vstupné hodnoty sa úspešne vložili do tabuľky<br/>';
}
$nazov = 'produkt2';
$cena = 456.78;
//opätovné vloženie dát, tentoraz ale s inými hodnotami
if ($prikaz1->execute() === TRUE){
echo 'Vstupné hodnoty sa úspešne vložili do tabuľky<br/>';
}
}
$prikaz1->close();
}
/*
bezpečný výber dát z tabuľky "tabulka1"
- vyberú sa položky, ktorých názov sa začína slovom "pro" a zároveň cena je väčšia ako 10
- používa sa metóda "prepare" na pripravenie dotazu, proces je obdobný ako v predošlom prípade
- výstupné hodnoty položiek sa uložia do premenných pomocou metódy "bind_result"
- výsledné položky sa postupne vyberú metódou "fetch" a vypíšu sa do prehľadnej tabuľky
*/
$nazov = 'pro%';
$cena = 10.0;
$dotaz2 = <<<SQL
SELECT `id`,`nazov`,`cena` FROM `test`.`tabulka1` WHERE (`cena` > ?) AND (`nazov` LIKE ?);
SQL;
$prikaz2 = $spojenie->prepare($dotaz2);
if ($prikaz2 !== FALSE){
if ($prikaz2->bind_param('ds',$cena, $nazov) === TRUE){
if ($prikaz2->execute() === TRUE){
if ($prikaz2->bind_result($id, $nazov, $cena) === TRUE){
echo <<<HTML
<table>
<thead>
<th>ID</th><th>Názov</th><th>Cena</th>
</thead>
HTML;
while ($prikaz2->fetch() === TRUE){
echo <<<HTML
<tr>
<td>{$id}</td><td>{$nazov}</td><td>{$cena}€</td>
</tr>
HTML;
}
echo <<<HTML
</table>
HTML;
}
}
}
$prikaz2->close();
}
}
}
}catch (Exception $vynimka){
echo $vynimka->getMessage();
}
?>
Comments