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, Zeus, Díl, Databáze, Primární klíč, Head, Root, Sloupec, DAL, Příkaz, Select, Užitečná funkce, Echo, Software na Heureka.cz



Sex manželských párů? Jen výjimečně. Ložnice ovládnou roboti s umělou inteligencí

Sex manželských párů? Jen výjimečně. Ložnice ovládnou roboti s umělou inteligencí

** Sex manželských párů jen při zvláštních příležitostech. ** Ložnice ovládnou sexuální roboti s umělou inteligencí. ** I to je jeden ze závěrů Mezinárodní robotické konference.

Filip KůželJiří Liebreich
RobotiSexUmělá inteligence
Nastal pravý čas na výměnu telefonu. Jak poznat, že ten váš už dosluhuje?

Nastal pravý čas na výměnu telefonu. Jak poznat, že ten váš už dosluhuje?

** Jak poznat, že váš telefon má nejlepší dny za sebou? ** Vypadá potlučeně, má pavučinu nebo nedostává aktualizace? ** Ukážeme si, kdy má smysl jeho oprava, a kdy už jen koupě nového

Martin Chroust
Prasklý displejVysloužilý mobilSmartphony
Vantage se oficiálně představuje v novém traileru z Apex Legends
Michal Maliarov
Respawn EntertainmentApex LegendsVideo
Jak poznat, že máte možná hacknutý telefon? Toto je devět symptomů, které můžete pozorovat

Jak poznat, že máte možná hacknutý telefon? Toto je devět symptomů, které můžete pozorovat

** Jak poznat, že je váš smartphone hacknutý? ** Hledejte známky po nestandardním chování telefonu ** Stačí když telefon vydrží méně nebo topí i v klidovém režimu...

Martin Chroust
Jak...Malware
Oppo a OnePlus nesmí v Německu prodávat telefony. Zákaz hrozí i v dalších zemích EU

Oppo a OnePlus nesmí v Německu prodávat telefony. Zákaz hrozí i v dalších zemích EU

** Patentové spory většinou ústí k tomu, že jedna z firem zaplatí ** Oppo ani OnePlus však nechtějí platit 2,50 EUR za každý telefon ** Firmy už v Německu nesní prodávat, a to může platit i o dalších trzích

Martin Chroust
NěmeckoPatentSmartphony
Kde se vzala potřeba velkých operačních pamětí v telefonech a kolik RAM zabírá Android?

Kde se vzala potřeba velkých operačních pamětí v telefonech a kolik RAM zabírá Android?

** RAM je po procesoru druhým nejdůležitějším HW parametrem ** Stará se o rychlý multitasking a o svižné načítání dat ** Věděli jste, kolik v RAM průměrně zabírá Android 12?

Martin Chroust
Virtuální RAMOperační paměť
Kurvítka v základní výbavě, výrobci mají umělé zastarávání v malíku. Začalo to bateriemi, pokračuje softwarem

Kurvítka v základní výbavě, výrobci mají umělé zastarávání v malíku. Začalo to bateriemi, pokračuje softwarem

** Nejen mobilní výrobci jsou naučeni rok od roku prodávat stále více telefonů ** Tento trend se však zákonitě musí někdy zastavit ** Jenže, co naplat, když jsou starší zařízení „uměle“ nepoužitelná?

Martin Chroust
Prasklý displejBaterieAktualizace softwaru