PHP - 34. díl – další příkazy pro práci s databázemi

34. díl seriálu o PHP bude věnován dalším, dosud nepopsaným příkazům pro práci s MySQL databázemi.

Úvod

Posledních několik dílů bylo spíše, než PHP věnováno úvodu do databází. Byly vysvětleny ty úplně nejzákladnější SQL příkazy, které jsou potřebné při práci s databází. Dále bylo něco místa věnováno úvodu do rozhraní phpMyAdmin. Vrátíme se tedy zpět k práci s PHP kódem.

V tomto a dalších dílech budu předpokládat, že nemáte problémy zadávat SQL příkazy, ať už do řádkového klienta MySQL, a nebo přes rozhraní phpMyAdmin. Práce s SQL příkazy je při kontaktu s databází prostě nezbytná a nelze se jí dost dobře vyhnout.

Rovněž základní práci s databází pomocí PHP již máme zvládnutou a můžeme se tedy dnes věnovat dalším užitečným funkcím, které nám PHP pro práci s MySQL nabízí.

Funkce mysql_affected_rows

Funkce mysql_affected_rows slouží ke zjištění, kolik řádků v tabulce změnil poslední SQL příkaz. Může to být někdy hodně užitečný údaj. Je jasné, že se dá použít po provedení těch příkazů, které nějak mění data. Nemá smysl se tedy ptát po příkazu typu SELECT, apod.

Pro demonstraci funkce mysql_affected_rows je tu trochu komplexnější příklad:

<html>
<head>
<title>Příklad 1. z 34. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
$id_spojeni = mysql_connect(`localhost`,`root`,``);
if (!$id_spojeni)
die(`Spojení s MySQL databází se nezdařilo.`);
$vysledek_vybrani = mysql_select_db(`pokus`,$id_spojeni);
if (!$vysledek_vybrani)
die(`Databázi pokus se nám nepodařilo vybrat.`);
$sql =
"CREATE TABLE IF NOT EXISTS slova("
."slovo varchar(30) not null,"
."primary key (slovo)"
.")";
$vysledek = mysql_query($sql,$id_spojeni);
if (!$vysledek)
die(`Nepodařilo se založit tabulku slova.`);
$sql = "INSERT INTO slova VALUES(`ahoj`),(`nazdar`)";
$vysledek = mysql_query($sql,$id_spojeni);
if (!$vysledek)
die(`Nepodařilo se vložit nová slova.`);
$pocet_zmenenych_radku = mysql_affected_rows($id_spojeni);
echo `Počet změněných řádků je `,$pocet_zmenenych_radku;
mysql_close($id_spojeni);
?>
</body>
</html>

Tento příklad předpokládá, že máme založenou databázi pokus. Tu jsme založili už dávno při našich hrátkách s řádkovým klientem MySQL.

V příkladu se zakládá tabulka s názvem slova, pokud již není založena. Tabulka s názvem slova slouží jako seznam slov. Proto má také tato tabulka jediný sloupec s názvem slovo, do kterého se prostě ukládají slova. V databázové tabulce slova je tedy uložený seznam slov, přičemž žádné slovo tam nesmí být dvakrát. Je to proto, protože sloupec slovo je zároveň primárním klíčem, a tedy musí být každé slovo jedinečné, nesmí se opakovat.

Po založení databázové tabulky slova se pokusíme příkazem INSERT přidat dvě slova, a to slovo "ahoj" a slovo "nazdar". A po přidání dvou slov se pomocí funkce mysql_affected_rows zeptáme, kolik bylo změněných řádků. Protože jsme přidali dvě slova, dostaneme odpověď, že počet změněných řádků je dva.

Příklad půjde spustit pouze jednou, protože při druhém spuštění zjistí, že slova "ahoj" a "nazdar" jsou již v databázové tabulce slova uloženy a nepůjde je tedy znovu vložit. Při druhém a dalším spuštění příkladu tedy dostanete hlášení, že se nepodařilo vložit nová slova.

Funkce mysql_num_rows

Funkce mysql_num_rows slouží ke zjištění, kolik řádků nám vrátil dotaz typu SELECT. Je to užitečné, pokud chceme třeba vypsat počet řádků v nějaké tabulce ještě před tím, nežli je máme možnost spočítat podle vrácených řádků.

Pro demonstraci použití funkce mysql_num_rows použijeme tabulku z předchozího příkladu, tudíž tento příklad si spusťte až poté, co spustíte předchozí příklad:

<html>
<head>
<title>Příklad 2. z 34. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
$id_spojeni = mysql_connect(`localhost`,`root`,``);
if (!$id_spojeni)
die(`Spojení s MySQL databází se nezdařilo.`);
$vysledek_vybrani = mysql_select_db(`pokus`,$id_spojeni);
if (!$vysledek_vybrani)
die(`Databázi pokus se nám nepodařilo vybrat.`);
$sql = "SELECT * FROM slova";
$id_vysledku = mysql_query($sql,$id_spojeni);
if (!$id_vysledku)
die(`Nepodařilo se nám poslat SQL dotaz do databáze.`);
echo `Celkem je k dispozici řádků: `,mysql_num_rows($id_vysledku),`<br>`;
echo `<table border="1">`;
while($radek = mysql_fetch_row($id_vysledku))
{
echo `<tr>`;
echo `<td>`,$radek[0],`</td>`;
echo `</tr>`;
}
echo `</table>`;
mysql_close($id_spojeni);
?>
</body>
</html>

Tento příklad si klade za úkol vypsat všechny řádky z databázové tabulky slova. Předtím, než tak učiní ale použije funkci mysql_num_rows k tomu, aby vypsal, kolik těchto řádků vlastně bude.

Funkce mysql_num_fields

Funkce mysql_num_fields slouží k tomu, aby bylo možné určit kolik sloupců výsledek dotazu SELECT vlastně obsahuje. Dost často víme předem, kolik sloupců by měl výsledek obsahovat, ale funkce mysql_num_fields nám umožňuje psát univerzální PHP skripty, které se poperou i s různými počty sloupců. Zde je úprava druhého příkladu tak, aby používal funkci mysql_num_fields:

<html>
<head>
<title>Příklad 3. z 34. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
$id_spojeni = mysql_connect(`localhost`,`root`,``);
if (!$id_spojeni)
die(`Spojení s MySQL databází se nezdařilo.`);
$vysledek_vybrani = mysql_select_db(`pokus`,$id_spojeni);
if (!$vysledek_vybrani)
die(`Databázi pokus se nám nepodařilo vybrat.`);
$sql = "SELECT * FROM slova";
$id_vysledku = mysql_query($sql,$id_spojeni);
if (!$id_vysledku)
die(`Nepodařilo se nám poslat SQL dotaz do databáze.`);
echo `Celkem je k dispozici řádků: `,mysql_num_rows($id_vysledku),`<br>`;
echo `Celkem je k dispozici sloupců: `,mysql_num_fields($id_vysledku),`<br>`;
echo `<table border="1">`;
while($radek = mysql_fetch_row($id_vysledku))
{
echo `<tr>`;
for ($i=0; $i<mysql_num_fields($id_vysledku); ++$i)
echo `<td>`,$radek[$i],`</td>`;
echo `</tr>`;
}
echo `</table>`;
mysql_close($id_spojeni);
?>
</body>
</html>

V tomto příkladu můžete vyměnit SQL příkaz "SELECT * FROM slova" za jiný SQL příkaz typu SELECT, který může obsahovat i jiný počet sloupců, a vždy se vše zobrazí správně.

Diskuze (5) Další článek: Norton Antivirus propustí díky chybě nebezpečný kód

Témata článku: Software, Programování, PHP, Příkaz, Databáze, Head, Sloupec, Echo, Primární klíč, Root, Zeus, Užitečná funkce, Select, Díl


Určitě si přečtěte

Co přijde po Netflixu a Amazonu? Tohle jsou streamovací služby, na které v Česku čekáme

Co přijde po Netflixu a Amazonu? Tohle jsou streamovací služby, na které v Česku čekáme

** Rozhodujete se mezi Netflixem a HBO Go? Věřte, bude hůř ** Na trhu je mnohem víc ambicióznějších streamovacích služeb ** Některé by mohly do ČR zamířit ještě letos

Lukáš Václavík | 45

Porovnání deseti cloudových disků: kam a za kolik uložit 100 GB, 1 TB a 10 TB dat?

Porovnání deseti cloudových disků: kam a za kolik uložit 100 GB, 1 TB a 10 TB dat?

** Zjistili jsme, kam do cloudu nejvýhodněji uložíte data ** Vytvořili jsme žebříček cen deseti cloudových úložišť ** Ceny se liší - často i velice výrazně!

Karel Kilián | 102

Nvidia představila grafické karty GeForce RTX 3090, RTX 3080 a RTX 3070. Známe české ceny

Nvidia představila grafické karty GeForce RTX 3090, RTX 3080 a RTX 3070. Známe české ceny

** Nvidia uvedla nové desktopové grafické karty GeForce RTX 3000 ** Jedná se o modely GeForce RTX 3070, 3080 a 3090 ** K výrobě se používá 8nm technologii od Samsungu

Karel Javůrek | 67


Aktuální číslo časopisu Computer

Megatest mobilů do 8 000 Kč

Test bezdrátových headsetů

Linux i pro začátečníky

Jak surfovat anonymně