DBMS MySQL je jednou z mnohých databáz podporovaných PHP. Systém MySQL je distribuovaný bezplatne a má dostatok výkonu na riešenie skutočných problémov.
Krátky úvod do MySQL
SQL je skratka pre slová Štruktúrovaný Dopytovací Jazyk, čo je skratka pre Structured Query Language. Tento jazyk je štandardným prostriedkom na prístup k rôznym databázam.
Systém MySQL je server, ku ktorému sa môžu pripojiť používatelia vzdialených počítačov.
Na prácu s databázami je vhodné použiť nástroj, ktorý je súčasťou Web Developer Kit: Denwer phpMyAdmin. Tu môžete vytvoriť novú databázu, vytvoriť novú tabuľku vo vybranej databáze, vyplniť tabuľku údajmi a pridať, odstrániť a upraviť údaje.
MySQL definuje tri základné typy údajov: číselný, dátumový a časový a reťazec. Každá z týchto kategórií je rozdelená do mnohých typov. Hlavné sú:
Každý stĺpec za typom údajov obsahuje ďalšie špecifikátory:
Typ | Popis |
---|---|
NIE JE NULL | Všetky riadky tabuľky musia mať v tomto atribúte hodnotu. Ak nie je zadané, pole môže byť prázdne (NULL) |
AUTOMATICKÝ PRÍRASTOK | Špeciálna funkcia MySQL, ktorú možno použiť na číselné stĺpce. Ak pri vkladaní riadkov do tabuľky necháte toto pole prázdne, MySQL automaticky vygeneruje jedinečnú hodnotu identifikátora. Táto hodnota bude o jednu viac ako maximálna hodnota, ktorá už v stĺpci existuje. Každá tabuľka môže mať najviac jedno takéto pole. Stĺpce s AUTO_INCREMENT musia byť indexované |
PRIMÁRNY KĽÚČ | Stĺpec je primárny kľúč tabuľky. Údaje v tomto stĺpci musia byť jedinečné. MySQL indexuje tento stĺpec automaticky |
NEPOPÍSANÉ | Po celočíselnom type znamená, že jeho hodnota môže byť kladná alebo nulová |
KOMENTÁR | Názov stĺpca tabuľky |
Vytvorenie novej databázy MySQL VYTVORIŤ DATABÁZU.
VYTVORIŤ DATABÁZU, AK NEEXISTUJE "základná" SADA ZNAKOV cp1251 COLLATE cp1251_bin
Vytvorte novú tabuľku vykonávané pomocou príkazu SQL VYTVORIŤ TABUĽKU. Napríklad tabuľka kníh pre kníhkupectvo by mala päť polí: ISBN, autor, názov, cena a počet kópií:
CREATE TABLE books (ISBN CHAR(13) NOT NULL, PRIMARY KEY (ISBN), autor VARCHAR(30), title VARCHAR(60), price FLOAT(4,2), množstvo TINYINT UNSIGNED); Ak sa chcete vyhnúť chybovému hláseniu, ak tabuľka už existuje, musíte zmeniť prvý riadok pridaním frázy „AK NEEXISTUJE“: CREATE TABLE IF NOT EXISTS books ...
Na tvorenie pole automatickej aktualizácie s aktuálnym dátumom typu TIMESTAMP alebo DATETIME použite nasledujúcu konštrukciu:
CREATE TABLE t1 (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Dodatokúdaje do tejto tabuľky sa vykonávajú pomocou príkazu SQL VLOŽIŤ. Napríklad:
INSERT INTO books (ISBN, autor, názov, cena, množstvo) VALUES ("5-8459-0184-7", "Zandstra Mat", "Teach Yourself PHP4 in 24 Hours", "129", "5");
Operátor sa používa na získanie údajov z tabuľky. VYBRAŤ. Získava údaje z databázy výberom riadkov, ktoré zodpovedajú zadaným kritériám vyhľadávania. Príkaz SELECT prichádza s veľkým množstvom možností a prípadov použitia.
Symbol * znamená, že všetky polia sú povinné. Napríklad:
VYBERTE * Z kníh;
Ak chcete získať prístup len k určitému poľu, musíte zadať jeho názov v príkaze SELECT. Napríklad:
VYBERTE si autora, názov, cenu Z kníh;
Ak chcete získať prístup k podmnožine riadkov v tabuľke, musíte zadať kritérium výberu, ktoré nastavuje konštrukcia KDE. Napríklad, ak chcete vybrať dostupné lacné knihy o PHP, vytvorte dotaz:
VYBERTE * Z kníh WHERE cena % Zhoduje sa s ľubovoľným počtom znakov, dokonca aj s nulou
_ Zhoduje sa presne s jedným znakom
Aby boli riadky načítané dopytom uvedené v určitom poradí, používa sa konštrukcia ZORADIŤ PODĽA. Napríklad:
VYBERTE si * Z kníh OBJEDNAŤ PODĽA ceny;
Predvolené objednať triedenie ide vzostupne. Pomocou kľúčového slova môžete zmeniť poradie zoradenia DESC:
VYBERTE * Z kníh OBJEDNAŤ PODĽA ceny DESC;
Triediť Môžete tiež použiť viacero stĺpcov. Namiesto názvov stĺpcov môžete použiť ich sériové čísla:
VYBERTE si * Z kníh OBJEDNAŤ DO 4, 2, 3;
Ak chcete zmeniť hodnoty predtým zaznamenané v tabuľke, použite príkaz AKTUALIZOVAŤ. Napríklad cena všetkých kníh sa zvýšila o 10 %:
AKTUALIZÁCIA SADA kníh cena = cena * 1.1;
Klauzula WHERE obmedzí UPDATE na určité riadky. Napríklad:
AKTUALIZÁCIA SADA kníh cena = cena * 1,05 KDE cena
Ak chcete odstrániť riadky z databázy, použite príkaz VYMAZAŤ. Nepotrebné riadky sú špecifikované pomocou klauzuly WHERE. Predávajú sa napríklad niektoré knihy:
VYMAZAŤ Z kníh WHERE množstvo = 0;
Ak chcete vymazať všetky záznamy
TRUNCATE TABLE názov_tabuľky
Ak chcete tabuľku úplne odstrániť, použite:
DROP TABLE názov_tabuľky
Komunikácia PHP s databázou MySQL
Po práci s phpMyAdminom na vytvorení databázy môžete začať pripájať túto databázu k externému webovému rozhraniu.
Ak chcete získať prístup k databáze z webu pomocou PHP, musíte vykonať nasledujúce základné kroky:
- Pripojenie k serveru MySQL.
- Výber databázy.
- Vykonanie databázového dotazu:
- prídavok;
- odstránenie;
- zmeniť;
- Vyhľadávanie;
- triedenie.
- Získanie výsledku dotazu.
- Odpojenie od databázy.
Na pripojenie k databázovému serveru v PHP existuje funkcia mysql_connect(). Jeho argumenty sú názov počítača, používateľské meno a heslo. Tieto argumenty možno vynechať. V predvolenom nastavení názov počítača = localhost , potom sa používateľské meno a heslo nevyžadujú. Ak sa PHP používa v kombinácii so serverom Apache, môžete funkciu použiť mysql_pconnect(). V tomto prípade spojenie so serverom nezmizne po ukončení programu alebo po zavolaní funkcie. mysql_close(). Funkcie mysql_connect() A mysql_pconnect() ak všetko prebehlo dobre, vráťte ID pripojenia. Napríklad:
$link = mysql_pconnect(); if (!$link) die ("Nedá sa pripojiť k MySQL");
Po vytvorení pripojenia k serveru MySQL je potrebné vybrať databázu. Na to slúži funkcia mysql_select_db(). Jeho argumentom je názov databázy. Funkcia vráti hodnotu true, ak zadaná databáza existuje a je prístupná. Napríklad:
$db = "vzorka"; mysql_select_db($db) or die("Nedá sa otvoriť $db");
Pridávanie, odstraňovanie, úprava a výber údajov vyžaduje vytvorenie a spustenie dotazu SQL. Na to má PHP funkciu mysql_query(). Jeho argumentom je reťazec dopytu. Funkcia vráti ID požiadavky.
Príklad 1
Pri každom spustení Príkladu 1 sa do tabuľky s rovnakými údajmi pridá nový záznam. Samozrejme, má zmysel pridávať údaje zadané používateľom do databázy.
Príklad 2-1 ukazuje HTML formulár na pridávanie nových kníh do databázy.
Príklad 2.1
Výsledky vyplnenia tohto formulára sa prenesú na insert_book.php.
Príklad 2.2
V príklade 2.2 sú zadané reťazcové dáta spracované funkciou lomítka(). Táto funkcia pridáva spätné lomky pred jednoduché úvodzovky ("), dvojité úvodzovky ("), spätné lomky (\) a nulový bajt. Faktom je, že podľa požiadaviek syntaxe databázového dotazu musia byť takéto znaky uzavreté v úvodzovkách.
Na určenie počtu záznamov vo výsledku dotazu použite funkciu mysql_num_rows().
Všetky záznamy výsledkov dotazov je možné prezerať v slučke. Pred tým pomocou funkcie mysql_fetch_ pre každý záznam sa získa asociatívne pole.
Príklad 3.1 je HTML formulár na vyhľadávanie konkrétnych kníh v databáze.
Príklad 3.1
Výsledky tohto formulára sa prenesú na search_book.php.
Príklad 3.2
".($i+1). $row["title"]."
Alternatívna možnosť
Vráťte sa späť a dokončite písanie"); $searchterm = addlashes($searchterm); mysql_connect() alebo zomrieť ("Nedá sa pripojiť k MySQL"); mysql_select_db ("vzorka") alebo zomrieť ("Nedá sa otvoriť databáza" ); $ result = mysql_query ("SELECT * FROM books WHERE ".$_POST["searchtype"]." ako "%".$searchterm."%""); $i=1; while($row = mysql_fetch_array( $result) ) ( echo "
".($i++) .$row["title"]."
"; echo "Autor: ".$row["author"]."
"; echo "ISBN: ".$row["ISBN"]."
"; echo "Cena: ".$row["price"]."
"; echo "Množstvo: ".$riadok["množstvo"]."
Ako teda funguje architektúra webovej databázy:
- Webový prehliadač používateľa odošle požiadavku HTTP na konkrétnu webovú stránku. Napríklad používateľ pomocou formulára HTML hľadá všetky knihy PHP. Stránka spracovania formulára sa nazýva search_book.php.
- Webový server prijme požiadavku na search_book.php, získa tento súbor a odovzdá ho PHP nástroju na spracovanie.
- PHP sa pripojí k serveru MySQL a odošle požiadavku.
- Server prijme požiadavku na databázu, spracuje ju a pošle výsledok (zoznam kníh) späť do PHP motora.
- PHP engine dokončí spustenie skriptu, naformátuje výsledok dotazu do HTML. Výsledok sa potom vráti ako HTML na webový server.
- Webový server odošle HTML do prehliadača a používateľ si môže zobraziť požadovaný zoznam kníh.
Použitie transakčného mechanizmu
Použitie transakčného mechanizmu ako príkladu prevodu peňazí z jednej osoby na druhú
If(mysql_query ("BEGIN") && mysql_query ("AKTUALIZOVAŤ SADA peňazí amt = amt - 6 WHERE meno = "Eva"") && mysql_query ("AKTUALIZOVAŤ SADA peňazí amt = amt + 6 WHERE meno = "Ida"") && mysql_query ("COMMIT"))( echo "Úspech"; )else( mysql_query ("ROLLBACK"); echo "Neúspešné"; )
VYBERTE … PRE AKTUALIZÁCIU
Ak spustíte viacero procesov, ktoré vytvárajú výberový dotaz v tej istej tabuľke, môžu vybrať rovnaký záznam súčasne.
Aby sa predišlo spomínanej situácii, je potrebné vykonať nielen SELECT dotaz, ale jeho rozšírenú verziu, o ktorej mnohí ani netušia: SELECT ... FOR UPDATE.
Preto pri vykonávaní tohto dotazu budú všetky dotknuté záznamy v databáze uzamknuté, kým sa nedokončí relácia s databázou alebo kým sa tieto záznamy neaktualizujú. Iný skript nebude môcť vybrať uzamknuté záznamy, kým nenastane jedna zo spomínaných podmienok.
Nie všetko je však také jednoduché. Musíte splniť ešte niekoľko podmienok. Po prvé, vaša tabuľka musí byť založená na architektúre InnoDB. V opačnom prípade blokovanie jednoducho nebude fungovať. Po druhé, pred vykonaním načítania musíte vypnúť automatické potvrdenie dopytu. Tie. inými slovami, automatické vykonanie požiadavky. Po zadaní požiadavky UPDATE budete musieť znova kontaktovať databázu a potvrdiť zmeny pomocou príkazu COMMIT:
PRÁCA S DATABÁZOU MySQL S NÁSTROJMI PHP
Prednáška. Pripravil Prokhorov V.S.
1. PRIPOJENIE PHP SKRIPTOV K MySQL tabuľkám
Zvážte najčastejšie používané funkcie, ktoré umožňujú prácu s databázou MySQL pomocou PHP.
Pri interakcii s PHP a MySQL program interaguje s DBMS prostredníctvom súboru funkcií.
1.1 Pripojenie k serveru. Funkcia mysql_connect
Pred prácou s databázou je potrebné nadviazať s ňou sieťové spojenie, ako aj autorizovať používateľa. To sa vykonáva pomocou funkcie mysql_connect().
zdroj mysql_connect(]])
Táto funkcia vytvorí sieťové pripojenie k databáze MySQL umiestnenej na hostiteľovi $server (predvolený je localhost, t.j. aktuálny počítač) a vráti ID otvoreného pripojenia. Všetky ďalšie práce sa vykonávajú s týmto identifikátorom. Všetky ostatné funkcie, ktoré berú tento identifikátor (handle) ako argument, budú jednoznačne identifikovať vybranú databázu. Pri registrácii sa zadáva používateľské meno $username a heslo $password (štandardne používateľské meno, pod ktorým sa spúšťa aktuálny proces - pri ladení skriptov: root a prázdne heslo):
$dbpasswd = ""; //Heslo
//Zobrazenie upozornenia
echo("
Р>");
Premenné $dblocation, $dbuser a $dbpasswd ukladajú názov servera, meno používateľa a heslo.
1.2 Odpojenie od servera. Funkcia mysql_close
Pripojenie k MySQL - server sa automaticky zatvorí po skončení skriptu alebo pri zavolaní funkcie mysql_close
bool mysql_close()
Táto funkcia ukončí pripojenie k serveru MySQL a vráti hodnotu true, ak bola operácia úspešná, a v opačnom prípade vráti hodnotu false. Funkcia berie ako argument identifikátor pripojenia k databáze vrátený funkciou mysql_connect.
$dblocation = "localhost"; //Názov servera
$dbuser = "root"; //Používateľské meno
$dbpasswd = ""; //Heslo
//Pripojenie k databázovému serveru
//Pred volaním funkcie potlačte chybový výstup symbolom @
$dbcnx = @ mysql_connect($dblocation, $dbuser, $dbpasswd);
if (!$dbcnx) //Ak je handle 0, spojenie zlyhalo
//Zobrazenie upozornenia
echo("
Databázový server nie je momentálne dostupný, takže stránka sa nemôže správne zobraziť.Р>");
if (mysql_close($dbcnx)) //zatvorte pripojenie
echo("Pripojenie k databáze ukončené");
echo("Nepodarilo sa mu dokončiť pripojenie");
1.3 Vytvorenie databázy. Funkcia CREATE DATABASE
Príkaz - vytvorte databázu je dostupný iba pre administrátora servera a na väčšine hostingov ho nie je možné vykonať:
CREATE DATABASE Názov databázy
Vytvorí novú databázu s názvom DatabaseName.
Príklad práce s touto funkciou:
@mysql_query("VYTVORIŤ DATABÁZU $dbname");
Odporúča sa všade používať apostrofy ("SQL - príkaz") ako oddeľovače reťazcov obsahujúcich SQL príkazy. To môže zabezpečiť, že žiadna premenná $ nebude náhodne interpolovaná (t. j. nahradená jej hodnotou) a zvýši sa bezpečnosť skriptov.
Príkaz na vytvorenie databázy CREATE DATABASE je dostupný iba pre superužívateľa a na väčšine hostingov ho nemôže vykonať jednoduchý používateľ. Je k dispozícii iba správcovi servera.
Pre experimenty vytvorte testovaciu databázu vykonaním SQL dotazu z príkazového riadku. Ak to chcete urobiť, musíte sa prihlásiť do systému MySQL a zadať príkazový riadok MySQL:
mysql> vytvorenie testovacej databázy databázy;
Potom by ste mali zadať:
mysql>použiť testovaciu bázu;
Vytvorená databáza:
1.4 Výber databázy. Funkcia mysql_select_db
Pred odoslaním prvého dotazu na MySQL server musíme špecifikovať, s ktorou databázou budeme pracovať. Na to je určená funkcia mysql_select_db:
bool mysql_select_db(reťazec $database_name [,zdroj $link_identifier])
Oznamuje PHP, že databáza $database_name bude použitá v budúcich operáciách na spojení $link_identifier.
Použitie tejto funkcie je ekvivalentné volaniu príkazu use v SQL dotaze, t.j. funkcia mysql_select_db vyberie databázu pre ďalšiu prácu a všetky nasledujúce SQL dotazy sa aplikujú na vybranú databázu. Funkcia berie ako argumenty názov vybranej databázy názov_databázy a zdroj deskriptora pripojenia. Funkcia vráti hodnotu true, ak bola operácia úspešná, a vráti hodnotu false v opačnom prípade:
//Kód pripojenia k databáze
if (! @mysql_select_db($dbname, $dbcnx))
//Zobrazenie upozornenia
echo("
Databáza momentálne nie je dostupná, preto sa stránka nedá správne zobraziť.Р>");
1.5 Riešenie chýb
Ak sa pri práci s MySQL vyskytnú chyby (napríklad zátvorky v dotaze nie sú vyvážené alebo nie je dostatok parametrov), chybové hlásenie a jeho číslo je možné získať pomocou nasledujúcich dvoch funkcií.
Je dôležité používať tieto funkcie opatrne a včas, pretože inak môže byť ladenie skriptov zložitejšie.
● Funkcia:
int mysql_errno()
vráti číslo poslednej zaznamenanej chyby. $link_identifier môžete vynechať, ak bolo počas behu skriptu vytvorené iba jedno pripojenie.
● Funkcia:
reťazec mysql_error()
vráti nie číslo, ale reťazec obsahujúci text chybovej správy. Je to užitočné na účely ladenia. Mysql_error sa zvyčajne používa v spojení s konštruktom or die(), napríklad:
@mysql_connect("localhost", "user", "password")
or die("Chyba pri pripájaní k databáze: ".mysql_error());
Operátor @ slúži ako obvykle na potlačenie štandardného varovania, ktoré sa môže vyskytnúť v prípade chyby.
V posledných verziách PHP sa varovania vo funkciách MySQL štandardne nezaprotokolujú.
1.6 Automatizácia pripojenia k MySQL. Súbor ( config.php )
Zvyčajne je na stránke niekoľko skriptov, ktoré potrebujú prístup k rovnakej databáze.
Odporúča sa, aby bol kód zodpovedný za pripojenie k MySQL oddelený do samostatného súboru a potom pripojený pomocou funkcie include k potrebným skriptom.
Funkcie na pripojenie, výber a vytvorenie databázy má zmysel umiestniť do rovnakého súboru (config.php), kde sú deklarované premenné s názvom servera $dblocation, používateľským menom $dbuser, heslom $dbpasswd a názvom databázy $dbname:
výpis config.php:
//config.php kód súboru obsahujúceho parametre pre pripojenie k serveru a výber databázy
//vytlačí prehliadaču chybové hlásenia o pripojení
$dblocation = "localhost"; //Názov servera
$dbname = "vložiť názov databázy" //Názov databázy: vytvorený alebo už existujúci
$dbuser = "root"; //Užívateľské meno databázy
$dbpasswd = ""; //Heslo
//Pripojenie k databázovému serveru
//Pred volaním funkcie potlačte chybový výstup symbolom @
[e-mail chránený] _connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) //Ak je handle 0, spojenie s databázovým serverom nie je vytvorené
//Zobrazenie upozornenia
echo("
Databázový server nie je momentálne dostupný, takže stránka sa nemôže správne zobraziť.
");//Vytvoriť databázu $dbname - toto môže urobiť iba superužívateľ
//Ak databáza už existuje, dôjde k nezávažnej chybe
@mysql_query("VYTVORIŤ DATABÁZU, ak $dbname');
//Kód pripojenia k databáze: jednoznačný výber novovytvorenej databázy alebo existujúcej databázy
//Pred volaním funkcie potlačte chybový výstup symbolom @
ak( [e-mail chránený] _select_db($dbname, $dbcnx)) //Ak je handle 0, pripojenie k databáze nie je vytvorené
//Zobrazenie upozornenia
echo("
Databáza momentálne nie je dostupná, preto sa stránka nedá správne zobraziť.
");// Malá pomocná funkcia, ktorá vytlačí správu
//chyba v prípade chyby databázového dotazu
function puterror($message)
echo("");
2. VYKONÁVANIE DOTAZU DO DATABÁZY
2.1 Vytvorenie tabuľky. Funkcia VYTVORIŤ TABUĽKU:
CREATE TABLE Názov tabuľky (typ FieldName, FieldName type,)
Tento príkaz vytvorí novú tabuľku v databáze so stĺpcami (poliami) definovanými ich názvami (FieldName) a špecifikovanými typmi. Po vytvorení tabuľky bude možné do nej pridávať záznamy pozostávajúce z polí uvedených v tomto príkaze.
Výpis test_11.php. Program, ktorý vytvorí novú tabuľku v databáze:
include "config.php";//Pripojte sa k serveru a vyberte databázu
mysql_query("VYTVORIŤ TABUĽKU, ak neexistujú ľudia
id INT AUTO_INCREMENT PRIMARY KEY,
or die("Chyba MySQL: ".mysql_error());
Tento skript vytvorí novú tabuľku ľudí s dvoma poľami. Prvé pole je typu INT (celé číslo) a názov je id. Druhým je typ TEXT (textový reťazec) a názov meno.
Ak tabuľka existuje, konštrukcia or die() bude fungovať.
Voliteľná klauzula if not exists, ak existuje, hovorí serveru MySQL, že by nemal generovať chybové hlásenie, ak tabuľka so zadaným názvom už v databáze existuje.
Spravil som si pre seba jednoduchú databázu udalostí v PHP s pripomienkou na e-mail. Poslúži ako príklad pre prácu v PHP s databázou.
Databáza je samozrejme MySQL.
Tabuľky je možné vytvárať manuálne cez phpMyAdmin, ako je popísané v príklade vytvorenia prieskumu PHP tu, ale tu vytvorím značky pomocou dopytov.
Súbor na vytváranie tabuliek je create.php (spustíme ho 1x, po vytvorení tabuliek ho vymažeme).
/* Переменные для соединения с базой данных */ $hostname = "localhost"; $username = "user"; $password = "password"; $dbName = "database"; /* создать соединение */ mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); /* выбрать базу данных. Если произойдет ошибка - вывести ее */ mysql_select_db($dbName) or die(mysql_error()); $query = "CREATE TABLE count (nn int(20))"; $res = mysql_query($query); $query = "INSERT INTO count VALUES("0")"; $res = mysql_query($query); $query = "CREATE TABLE count1 (nn int(20))"; $res = mysql_query($query); $query = "INSERT INTO count1 VALUES("0")"; $res = mysql_query($query); $query = "CREATE TABLE usvers (nn int(20), name VARCHAR(240), adres VARCHAR(240))"; $res = mysql_query($query); $query = "CREATE TABLE sobbit (nn int(20), usver VARCHAR(240), sobit VARCHAR(240), opsobit text(64000), kogda DATETIME)"; $res = mysql_query($query); /* Закрыть соединение */ mysql_close(); ?>
Registračný formulár užívateľa add.php
Do databázy zadáme login a heslo add1.php
/* Этот скрипт получает переменные из add.php */ /* Переменные для соединения с базой данных */ $hostname = "localhost"; $username = "user"; $password = "password"; $dbName = "database"; /* Таблица MySQL, в которой хранятся данные */ $userstable = "count"; /* создать соединение */ mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); /* выбрать базу данных. Если произойдет ошибка - вывести ее */ mysql_select_db($dbName) or die(mysql_error()); $name = mysql_real_escape_string($name); $adres = mysql_real_escape_string($adres); $query = "SELECT * FROM $userstable"; $res1 = mysql_query($query); while ($row = mysql_fetch_row($res1)) $nn=$row+1; $query = "UPDATE $userstable SET nn=$nn"; mysql_query($query) or die(mysql_error()); /* Таблица MySQL, в которой хранятся данные */ $userstable = "usvers"; /* создать соединение */ mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); /* выбрать базу данных. Если произойдет ошибка - вывести ее */ mysql_select_db($dbName) or die(mysql_error()); /* составить запрос для вставки информации о клиенте в таблицу */ $query = "INSERT INTO $userstable VALUES("$nn", "$name","$adres")"; /* Выполнить запрос. Если произойдет ошибка - вывести ее. */ mysql_query($query) or die(mysql_error()); echo "Информация о вас занесена в базу данных."; /* Закрыть соединение */ mysql_close(); ?>Vstúpiť
Registrovaný.
Teraz formulár na zadanie prihlasovacieho mena a hesla login.php
Pripomenúť heslo
Po správnom zadaní loginu a hesla zobrazíme zoznam udalostí see.php
"; ) else ( echo "Príspevky používateľa ".$name."
"; /* MySQL tabuľka, kde sú uložené údaje */ $userstable = "sobbit"; /* vytvorenie pripojenia */ mysql_connect($hostname,$username,$password) OR DIE("Nedá sa vytvoriť pripojenie"); /* výber databázy Ak sa vyskytne chyba, zobrazte ju */ mysql_select_db($dbName) alebo die(mysql_error()); $query = "SELECT * FROM $userstable WHERE usver = "".$name."" "; $res = mysql_query ($query) or die(mysql_error()); /*získanie riadkov z databázy MySQL */ while ($row=mysql_fetch_array($res)) ( echo $row["sobit"]." ".$row[ "opsobit "]." ".$row["kogda"]; /* Nakreslite tabuľku s údajmi a tlačidlom na úpravu záznamov */ echo " "; echo"
"; ) /* Nakreslite formulár na zadanie novej udalosti */ echo "
Pod štítkom udalosti formulár na zadanie novej udalosti a tlačidlo Pridať, po kliknutí sa otvorí seeadd.php, udalosť sa pridá a opäť sa zobrazí štítok s novou udalosťou a vstupný formulár. Aby bolo všetko zadané správne, musíte si dať pozor na formát dátumu a kódovanie.
"; ) else ( /* MySQL tabuľka, kde sú uložené údaje */ $userstable = "count1"; /* vytvorenie pripojenia */ mysql_connect($hostname,$username,$password) OR DIE("Nedá sa vytvoriť pripojenie ") ; /* vyberte databázu, ak sa vyskytne chyba, zobrazte ju */ mysql_select_db($dbName) or die(mysql_error()); $name = mysql_real_escape_string($name); $asobit = mysql_real_escape_string($asobit); $aopsobit = mysql_real_escape_string ($aopsobit); $akogda = mysql_real_escape_string($akogda); $query = "SELECT * FROM $userstable"; $res1 = mysql_query($query); while ($row = mysql_fetch_row($res1)) $nn=$ riadok +1; $query = "AKTUALIZÁCIA $userstable SET nn=$nn"; mysql_query($query) or die(mysql_error()); /* MySQL tabuľka, kde sú uložené dáta */ $userstable = "sobbit"; /* vytvoriť pripojenie */ mysql_connect($hostname,$username,$password) OR DIE("Nedá sa vytvoriť pripojenie"); /* vybrať databázu. Ak sa vyskytne chyba, zobrazte ju */ mysql_select_db($dbName) alebo zomriete (mysql_error()); /* požiadajte o vloženie informácie o udalosti do tabuľky */ $query = "INSERT INTO $userstable VALUES("$nn", "$name","$asobit","$aopsobit","$akogda")"; /* Vykonať požiadavku. Ak sa vyskytne chyba, vypíšte ju. */ mysql_query($query) or die(mysql_error()); echo "Do databázy boli pridané informácie o udalosti."; ?>
echo "Записи пользователя ".$name."
"; /* vytvorte pripojenie */ mysql_connect($hostname,$username,$password) OR DIE("Nedá sa vytvoriť pripojenie "); /* vyberte databázu. Ak sa vyskytne chyba, vytlačte ju */ mysql_select_db($dbName) or die(mysql_error()); $query = "SELECT * FROM $userstable WHERE usver = "".$name."" "; $res = mysql_query($query) or die(mysql_error()); while ($row = mysql_fetch_array($res)) ( echo $row["sobit"]." ".$row["opsobit"]." ".$row["kogda"]; echo "
";) echo"
V tabuľke tlačidlo Zmeniť otvorí súbor change.php s formulárom na zmenu záznamu zadaného skôr.
";) inak (echo" "; echo"
";) echo"
Opäť sa zobrazí tabuľka so zmenenou udalosťou a vstupný formulár.
Súbor prover.php, ktorý je umiestnený v crone, včas skontroluje databázu pre expirované udalosti, ak ho nájde, pošle užívateľovi upomienku na e-mail.
".$row["kedy"]."
Pozor!
Tento list bol odoslaný robota A nemusíte odpovedať!"; $headers = "Od: ".$riadok["usver"]."<".$row["usver"].">\r\nTyp obsahu: text/html; charset=windows-1251 \r\n"; mail ($to, $predmet, $správa, $hlavičky); ) else ( ) ) /* Zatvoriť spojenie */ mysql_close(); ?>
A nakoniec formulár, ktorý používateľovi odošle zabudnuté heslo na e-mail.
Prihlasovací formulár pre pripomenutie zabudnutého hesla, súbor forgot.php.
Po kliknutí na tlačidlo „Odoslať“ sa spustí súbor forgot1.php, ktorý pošle heslo na e-mail používateľa.
"; ) else ( $to = $riadok["meno"]; $subject = "Obnovenie hesla pre ".$row["meno"]; $message = "Prihlásenie: ".$row["meno"]."
heslo:".$row["adresa"]; $headers = "Od: ".$row["meno"]."<".$row["name"].">\r\nTyp obsahu: text/html; charset=windows-1251 \r\n"; mail ($to, $predmet, $správa, $hlavičky); echo "Informácie odoslané na zadanú adresu."; ) /* Zatvoriť spojenie */ mysql_close(); ?> Prihlásiť sa
Výsledkom je taká jednoduchá databáza udalostí s funkciou notifikácie udalostí na e-mail užívateľa:
Zoznam udalostí je navyše možné usporiadať vo forme tabletu, do tabuľky môžete pridať aj tlačidlo „Vymazať“ na vymazanie riadkov, umožniť „uzavretie“ udalostí kliknutím na odkaz ihneď v pripomenutí urobte nejaký druh šifrovania hesla, ktoré sa prenáša cez panel s adresou.
A tak môžete vyššie uvedené časti kódu vložiť do šablón stránky, aby bola krásna, nahrať ju na stránku a bude vám e-mailom pripomínať udalosti online.
Prostriedky efektívneho ukladania a získavania veľkého množstva informácií výrazne prispeli k úspešnému rozvoju internetu. Na ukladanie informácií sa zvyčajne používajú databázy. Známe stránky ako Yahoo, Amazon a Ebay sa vo veľkej miere spoliehajú na spoľahlivosť databáz, ktoré uchovávajú obrovské množstvo informácií. Samozrejme, podpora databáz nie je len pre obrovské korporácie – weboví programátori majú k dispozícii niekoľko výkonných databázových implementácií za relatívne nízku cenu (ak nie zadarmo).
Správna organizácia databázy poskytuje rýchlejšie a flexibilnejšie možnosti získavania údajov. Výrazne zjednodušuje implementáciu vyhľadávacích a triediacich nástrojov a problémy s prístupovými právami k informáciám sa riešia pomocou nástrojov na kontrolu privilégií, ktoré sú prítomné v mnohých systémoch správy databáz (DBMS). Okrem toho sa zjednodušujú procesy replikácie a archivácie údajov.
Kapitola začína podrobným popisom získavania a aktualizácie údajov v MySQL, pravdepodobne najpopulárnejšom DBMS používanom v PHP (http://www.mysql.com). Príklad MySQL ukáže, ako PHP načítava a aktualizuje dáta v databáze; pozrieme sa na základné vyhľadávacie a triediace nástroje používané v mnohých webových aplikáciách. Potom prejdeme k podpore PHP pre ODBC (Open Data Base Connectivity), čo je všeobecné rozhranie, ktoré možno použiť na pripojenie k rôznym DBMS súčasne. Podpora ODBC v PHP bude demonštrovaná na príklade pripojenia a načítania údajov z databázy Microsoft Access. Kapitolu uzatvára projekt, ktorý využíva PHP a MySQL na vytvorenie hierarchického adresára s informáciami o obľúbených stránkach. Keď sú do katalógu zahrnuté nové lokality, používateľ ich priradí do jednej zo štandardných kategórií definovaných správcom lokality.
Predtým, ako prejdem k diskusii o MySQL, chcem povedať pár slov o SQL, najrozšírenejšom jazyku na prácu s databázami. Jazyk SQL je základom takmer všetkých existujúcich DBMS. Aby sme mohli prejsť na príklady práce s databázami, je potrebné mať aspoň všeobecnú predstavu o tom, ako SQL funguje.
Čo je SQL?
SQL sa zvyčajne popisuje ako štandardný jazyk používaný na interakciu s relačnými databázami (pozri nižšie). SQL však nie je programovací jazyk ako C, C++ alebo PHP. Ide skôr o nástroj rozhrania na vykonávanie rôznych operácií s databázami, ktorý používateľovi poskytuje štandardnú sadu príkazov. Možnosti SQL sa neobmedzujú len na získavanie údajov z databázy. SQL poskytuje rôzne možnosti interakcie s databázou, vrátane:
- definícia dátovej štruktúry
Všimnite si, že definícia SQL hovorila, že jazyk bol navrhnutý tak, aby s ním pracoval vzťahový databázy. Relačné DBMS organizujú údaje do súboru vzájomne prepojených tabuliek. Vzťahy medzi tabuľkami sú implementované ako odkazy na údaje v iných tabuľkách. tabuľky možno si predstaviť ako dvojrozmerné pole, v ktorom je umiestnenie každého prvku charakterizované určitými hodnotami riadkov a stĺpcov. Príklad relačnej databázy je na obr. 11.1.
Ryža. 11.1. Príklad relačnej databázy
Ako je možné vidieť na obr. 11.1 sa každá tabuľka skladá z riadkov (záznamov) a stĺpcov (polí). Každé pole má priradený jedinečný (v rámci danej tabuľky) názov. Všimnite si vzťah medzi zákazníkmi a tabuľkami objednávok, označený šípkou. Informácie o objednávke obsahujú krátky identifikátor zákazníka, ktorý zabraňuje zbytočnému ukladaniu mena zákazníka a ďalších podrobností. V zobrazenej databáze existuje ďalší vzťah medzi tabuľkami objednávok a produktov. Tento vzťah vytvára pole prod_id, v ktorom je uložený identifikátor produktu objednaného týmto zákazníkom (určený poľom custjd). Prítomnosť týchto vzťahov uľahčuje odkazovanie na úplné údaje o zákazníkoch a produktoch pomocou jednoduchých identifikátorov. Správne organizovaná databáza sa zmení na výkonný nástroj na efektívne organizovanie a ukladanie údajov s minimálnou redundanciou. Majte túto databázu na pamäti, v ďalších príkladoch na ňu budem často odkazovať.
Ako sa teda vykonávajú operácie s relačnými databázami? Na tento účel má SQL špeciálnu sadu bežných príkazov, ako napríklad SELECT, INSERT, UPDATE a DELETE. Napríklad, ak potrebujete získať e-mailovú adresu zákazníka s ID 2001cu (pozri obrázok 11.1), stačí spustiť nasledujúci príkaz SQL:
SELECT cust_email FROM customers WHERE custjd = "2001cu"
Všetko je celkom logické, nie? V súhrne príkaz vyzerá takto:
SELECT názov_poľa FROM názov_tabuľky [podmienka WHERE]
Hranaté zátvorky znamenajú, že posledná časť príkazu je voliteľná. Ak chcete napríklad získať e-mailové adresy všetkých zákazníkov v tabuľke Zákazníci, stačí spustiť nasledujúci dotaz:
SELECT cust_email FROM zákazníkov
Povedzme, že chcete zahrnúť nový záznam do tabuľky produktov. Najjednoduchší príkaz vloženia vyzerá takto:
INSERT in products VALUES ("1009pr", "Červené paradajky", "1.43");
Ak budete neskôr potrebovať tieto údaje vymazať, použite nasledujúci príkaz:
DELETE FROM products WHERE prod_id = 1009r";
Existuje mnoho druhov príkazov SQL a ich úplný popis presahuje rámec tejto knihy. Na túto tému by sa dala napísať samostatná kniha! Snažil som sa uistiť, že príkazy SQL použité v príkladoch sú relatívne jednoduché, ale dostatočne realistické. Na webe je veľa výukových informácií a zdrojov o SQL. Niektoré odkazy sú uvedené na konci tejto časti.
Príkazy SQL nie je potrebné písať veľkými písmenami. Preferujem však tento zápis, pretože pomáha rozlišovať medzi komponentmi požiadavky.
Keďže čítate túto knihu, pravdepodobne sa pýtate, ako fungujú databázy na webe? Spravidla najskôr s niektorými
alebo jazyku rozhrania (PHP, Java alebo Perl), vytvorí sa spojenie s databázou, po ktorom program pristupuje k databáze pomocou dotazov pomocou štandardnej sady nástrojov. Jazyk rozhrania možno považovať za akési „lepidlo“, ktoré spája databázu s webom. Prechádzam na môj obľúbený front-end jazyk PHP.
Dodatočné zdroje
Nižšie sú uvedené niektoré internetové zdroje o SQL. Sú užitočné pre začiatočníkov aj skúsených programátorov.
- SQL tutoriály: http://perl.about.com/compute/perl/cs/beginningsql/index.htm.
- SQLCourse.com (so vzorovou databázou): http://www.sqlcourse.com .
- SQL pre Web Geeks: http://www.arsdigita.com/books/sql.
- Úvod do SQL (aplikovaný na MySQL): http://www.devshed.com/Server_side/MySQL/Intro.
Podpora databáz v PHP
Ak by som mal pomenovať najdôležitejší aspekt PHP, asi by som sa zameral na podporu databáz. PHP má rozsiahlu podporu pre takmer každý existujúci databázový server, vrátane:
PostgreSQL | ||
Pevné | ||
Sybase | ||
UNIX dbm | ||
File-Pro (iba na čítanie) |
Velods | |
Oracle (OCI7 a OC18) |
Ako ukazuje tento zoznam, podpora databáz PHP siaha od kompatibility s databázami, ktoré každý pozná (napríklad Oracle), až po tie, o ktorých mnohí nikdy ani nepočuli. Morálka je taká, že ak budete používať seriózny DBMS na ukladanie informácií distribuovaných cez web, je pravdepodobné, že databáza je podporovaná PHP. Podpora databázy v PHP je reprezentovaná súborom štandardných funkcií pre pripojenie k databáze, spracovanie dotazov a prerušenie spojenia.
Podrobný popis všetkých podporovaných databáz jednoznačne presahuje rámec tejto knihy. Server MySQL však poskytuje dobrú predstavu o všeobecných možnostiach podpory databáz v PHP. Z tohto dôvodu budú príklady vo zvyšku tejto a všetkých ostatných kapitol knihy používať syntax MySQL. Bez ohľadu na to, s ktorým databázovým serverom pracujete, je jednoduché prispôsobiť príklady.
Inštalácia
Jedným z dôvodov popularity MySQL medzi používateľmi PHP je, že podpora pre tento server je automaticky súčasťou PHP. Stačí teda dodržať správnu inštaláciu balíka MySQL Databáza MySQL je kompatibilná s takmer akýmkoľvek hlavným operačným systémom vrátane FreeBSD, Solaris, UNIX, Linux a rôznymi verziami Windows. Hoci je licenčná politika MySQL flexibilnejšia ako iné databázové servery, dôrazne vám odporúčam, aby ste si prečítali licenčné informácie na webovej stránke MySQL (http://www.mysql.com).
Najnovšiu verziu MySQL je možné akceptovať z ľubovoľnej zrkadlovej lokality. Úplný zoznam zrkadlových stránok je dostupný na http://www.mysql.com/downloads/mirrors.html. V čase písania tohto článku je najnovšia stabilná verzia MySQL 3.22.32 a verzia 3.32 je v beta testovaní. Samozrejme, vždy by ste si mali nainštalovať najnovšiu stabilnú verziu, je to vo vašom najlepšom záujme. Navštívte najbližšiu „zrkadlovú“ stránku a stiahnite si vhodnú verziu pre váš operačný systém. V hornej časti stránky sú odkazy na nové verzie pre rôzne platformy. Nezabudnite si prečítať celú stránku, pretože končí odkazmi na niektoré konkrétne OS.
Vývojový tím MySQL pripravil podrobnú dokumentáciu popisujúcu proces inštalácie. Odporúčam vám, aby ste si pozorne preštudovali všetky všeobecné aspekty inštalácie, neobmedzovali sa len na informácie súvisiace priamo s vaším operačným systémom.
Nastavenie MySQL
Po úspešnej inštalácii je potrebné nakonfigurovať server MySQL. Proces prispôsobenia pozostáva najmä z vytvárania nových databáz a úprav tabuľky privilégiá MySQL. Tabuľky privilégií riadia prístup k databázam MySQL. Správne nastavenie tabuľky hrá mimoriadne dôležitú úlohu v bezpečnosti vašich databáz, takže pred spustením lokality v produkčnom režime musíte plne porozumieť systému práv.
Tabuľky privilégií MySQL vyzerajú na prvý pohľad odstrašujúco, ale keď im správne porozumiete, ďalšia údržba sa stane veľmi jednoduchou úlohou. Úplný popis tabuliek privilégií presahuje rámec tejto knihy. Na webe je však veľa zdrojov, ktoré sú navrhnuté tak, aby pomohli novým používateľom MySQL. Ďalšie informácie nájdete na webovej lokalite MySQL (http://www.mysql.com).
Po úspešnej inštalácii a konfigurácii balíka MySQL môžete začať experimentovať s databázami na webe! Práve tejto téme je venovaná ďalšia časť. Začnime tým, že sa pozrieme na podporu MySQL v PHP.
Štandardné funkcie PHP pre prácu s MySQL
Takže ste úspešne vytvorili a otestovali všetky požadované povolenia; všetko je pripravené na prácu so serverom MySQL. V tejto časti predstavím štandardné funkcie PHP, ktoré uľahčujú komunikáciu PHP skriptov s MySQL serverom. Všeobecná postupnosť akcií pri interakcii so serverom MySQL vyzerá takto:
- Vytvorte pripojenie k serveru MySQL. Ak pokus zlyhá, zobrazte príslušnú správu a ukončite proces.
- Vyberte databázu servera MySQL. Ak pokus o výber zlyhá, zobrazte príslušnú správu a ukončite proces. Na spracovanie dotazov môžete otvoriť viacero databáz súčasne.
- Spracovať požiadavky na vybranú databázu (alebo databázy).
- Po spracovaní požiadaviek zatvorte pripojenie k databázovému serveru.
Príklady v tejto časti používajú tabuľky produktov, zákazníkov a objednávok (pozri obrázok 11.1). Ak si chcete všetky príklady vyskúšať sami, vytvorte si tieto tabuľky alebo skopírujte stránku so štruktúrou, aby ste nemuseli stále listovať knihou.
Začnime teda úplne od začiatku – teda pripojením sa k MySQL serveru.
Funkcia mysql_connect() nadviaže spojenie so serverom MySQL Po úspešnom pripojení k MySQL môžete pristúpiť k výberu databáz obsluhovaných týmto serverom. Syntax funkcie mysql_connect() je:
int mysql_connect ( [:/cesta//do/zásuvky] [, používateľské meno reťazca] [, heslo reťazca])
Parametru hostiteľa sa odovzdá názov hostiteľského počítača špecifikovaný v tabuľkách privilégií servera MySQL. Samozrejme sa používa aj na presmerovanie požiadaviek na webový server, na ktorom beží MySQL, keďže sa k serveru MySQL môžete pripojiť vzdialene. Spolu s názvom hostiteľa je možné zadať voliteľné parametre - číslo portu, ako aj cestu k soketu (pre lokálneho hostiteľa). Parametre používateľského mena a hesla sa musia zhodovať s používateľským menom a heslom špecifikovaným v tabuľkách privilégií MySQL. Všimnite si, že všetky parametre sú voliteľné, pretože grantové tabuľky možno nakonfigurovať tak, aby umožňovali pripojenie bez overenia. Ak parameter hostiteľa nie je zadaný, mysql_connect() sa pokúsi pripojiť k lokálnemu hostiteľovi.
Príklad otvorenia pripojenia k MySQL:
@mysql_connect(" localhost", "web", "4tf9zzzf")
V tomto príklade je localhost názov počítača, web je meno používateľa a 4tf9zzzf je heslo. Znak @ pred volaním funkcie mysql_connect() potlačí všetky chybové hlásenia, ktoré sa vyvolajú pri neúspešnom pokuse o pripojenie – sú nahradené správou špecifikovanou pri volaní die(). Všimnite si, že hodnota vrátená z volania rnysql_connect() sa v tomto príklade nepoužije. Ak program používa iba jedno pripojenie k serveru MySQL, je to celkom normálne. Ak však program vytvorí pripojenia k viacerým serverom MySQL na rôznych hostiteľoch, ID pripojenia vrátené volaním mysql_connect() by sa malo uložiť, aby nasmerovalo následné príkazy na správny server MySQL. Príklad:
$link1 = @mysql_connect("www.somehost.com", "web", "abcde") or die("Nepodarilo sa pripojiť k
MySQL server!");
$linkl = @mysql_connect("www.someotherhost.com", "usr", "secret") or die("Nepodarilo sa pripojiť
na server MySQL!");
Identifikátory $link1 a $link2 sú odovzdané pri následných dotazoch do databáz. Čoskoro sa dozviete, ako nasmerovať požiadavku na správny server pomocou identifikátora pripojenia.
Funkcia mysql_pconnect() poskytuje podporu pre trvalé pripojenia. V prostrediach s viacerými používateľmi sa odporúča použiť mysql_pconnect() namiesto mysql_connect() na šetrenie systémových zdrojov. Typy parametrov a návratová hodnota funkcie mysql_pconnect() sú úplne rovnaké c mysql_connect().
mysql_select_db()
Po úspešnom pripojení k MySQL je potrebné vybrať databázu umiestnenú na serveri. Na to slúži funkcia mysql_select_db(). Syntax funkcie mysql_select_db() je:
int mysql_select_db (reťazec názov_databázy [, int connection_id])
Parameter database_name definuje vybranú databázu, identifikátor
ktorý je vrátený funkciou mysql_select_db(). Poznámka: parameter
connection_id je voliteľné len pre jedno otvorené pripojenie
MySQL server. Ak existuje viacero otvorených pripojení, táto možnosť
musí byť uvedené. Príklad výberu databázy pomocou funkcie mysql_select_db():
or die("Nepodarilo sa pripojiť k serveru MySQL!");
Ak je v programe vybratá len jedna databáza, nie je potrebné ukladať jej ID. Keď je však vybratých viacero databáz, vrátené ID sa zachovajú, aby ste sa pri spracovaní požiadavky mohli odvolávať na správnu databázu. Ak nie je zadaný žiadny identifikátor, použije sa posledná vybraná databáza.
Po dokončení práce so serverom MySQL je potrebné spojenie ukončiť. Funkcia mysql_close() zatvorí spojenie, špecifikované voliteľným parametrom. Ak parameter nie je nastavený, funkcia mysql_close() uzavrie posledné otvorené pripojenie. Syntax funkcie mysql_close() je:
int mysql_close()
Príklad použitia mysql_close():
@mysql_connect("localhost", "web", "4tf9zzzf")
or die("Nepodarilo sa pripojiť k serveru MySQL!");
@mysql_select_db("spoločnosť") or die("Nepodarilo sa vybrať databázu spoločnosti!"); tlačiť "Ste pripojení k databáze MySQL!";
V tomto príklade nemusíte zadať ID pripojenia, pretože v čase volania mysql_close() existuje iba jedno otvorené pripojenie k serveru.
Pripojenia otvorené pomocou mysql_pconnect() nie je potrebné uzatvárať.
Funkcia mysql_query() poskytuje rozhranie na dopytovanie databáz.
údajov. Syntax funkcie mysql_query() je:
int mysql_query (reťazcový dotaz [, int connection_id])
Parameter dotazu obsahuje text dotazu v SQL. Požiadavka sa odošle buď pripojeniu špecifikovanému voliteľným parametrom connection_id, alebo, ak parameter neexistuje, poslednému otvorenému pripojeniu.
Neskúsení programátori sa často mylne domnievajú, že funkcia mysql_query() vracia výsledky spracovania dotazu. To nie je pravda - v závislosti od typu dotazu môže volanie mysql_query() viesť k rôznym dôsledkom. Po úspešnom dokončení príkazu SQL SELECT sa vráti identifikátor výsledku, ktorý sa následne odovzdá funkcii mysql_result() na následné formátovanie a zobrazenie výsledkov dotazu. Ak spracovanie požiadavky zlyhá, funkcia vráti hodnotu FALSE. Funkcia mysql_result() je popísaná v jednej z nasledujúcich častí. Počet záznamov zahrnutých v dotaze je určený pomocou funkcie mysql_num_rows(). Táto funkcia je tiež popísaná nižšie.
Na základe toho uvediem príklady mysql_query() až po opísaní funkcií mysql_result() a mysql_affected_rows().
Ak sa obávate, že pri spracovaní dotazov sa spotrebuje príliš veľa pamäte, zavolajte štandardnú funkciu PHP mysql_free_result. Pri volaní sa odovzdá identifikátor výsledku vrátený mysql_query(). Funkcia mysql_free_result() uvoľní všetku pamäť spojenú s daným dotazom.
mysqlaffed_rows()
V mnohých situáciách chcete vedieť počet záznamov zahrnutých v dotaze SQL pomocou príkazov INSERT, UPDATE, REPLACE alebo DELETE. Problém rieši funkcia mysql_affected_rows(). Syntax funkcie:
int mysql_affected_rows()
Všimnite si, že parameter connection_id je voliteľný. Ak nie je zadaný, mysql_affected_rqws() sa pokúsi použiť posledné otvorené pripojenie. Príklad:
// Pripojte sa k serveru a vyberte databázu
@mysql_connect("localhost", "web". "4tf9zzzf")
or die("Nepodarilo sa pripojiť k serveru MySQL!");
@mysql_select_db("spoločnosť") or die("Nepodarilo sa vybrať databázu spoločnosti!");
// Vytvorte požiadavku
$query = "AKTUALIZÁCIA SADA produktov prod_name = \"cantaloupe\"
WHERE prod_id = \"10001pr\";
// Vykonať požiadavku
// Určenie počtu aktualizovaných záznamov
print "Celkový riadok aktualizovaný; ".mysql_affected_rows();
Spustenie tohto úryvku vytvorí nasledujúci výstup:
Celkový počet aktualizovaných riadkov: 1
Funkcia mysql_affected_rows() nefunguje s dotazmi založenými na príkaze SELECT. Funkcia mysql_num_rows() opísaná v ďalšej časti sa používa na určenie počtu riadkov vrátených volaním SELECT.
V jednej konkrétnej situácii funkcia mysql_affected_rows() zlyhá. Pri vykonávaní príkazu DELETE bez klauzuly WHERE funkcia mysql_affected_rows() vždy vráti 0.
mysql_num_rows()
Funkcia mysql_num_rows() určuje počet riadkov vrátených príkazom SELECT. Syntax funkcie mysql_num_rows():
int mysql_num_rows (int výsledok)
Príklad použitia mysql_num_rows():
// Pripojte sa k serveru a vyberte databázu @mysql_connect("localhost", "web", "4tf9zzzf")
or die("Nepodarilo sa pripojiť k serveru MySQL!");
@mysql_select_db("spoločnosť") or die("Nepodarilo sa vybrať databázu spoločnosti!");
// Vyberte všetky produkty, ktorých názvy začínajú na „p“
$query = "VYBERTE názov_výrobku Z produktov WHERE názov_výrobku LIKE \"p*\"";
print "Celkový počet vybratých riadkov: ".mysql_num_rows($result);
Keďže tabuľka obsahuje iba jeden produkt, ktorého názov začína písmenom p (hrušky), vráti sa iba jeden záznam. výsledok:
Celkový počet vybratých riadkov: 1
Funkcia mysql_result() sa používa v spojení s mysql_query() (pri vykonávaní dotazu pomocou príkazu SELECT) na získanie množiny údajov. Syntax funkcie mysql_resu1t():
int mysql_result(int result_id, int záznam [.zmiešané pole"]")
Parameter result_id je hodnota vrátená funkciou mysql_query(). Parameter záznamu odkazuje na špecifický záznam v množine údajov identifikovaný pomocou result_id. Nakoniec vo voliteľnom parametri možno zadať pole:
- offset poľa v tabuľke;
- názov poľa;
- názov poľa vo formáte field_name_tdblitz_name.
Výpis 11.1 používa databázu znázornenú na obrázku 11.1. 11.1.
Výpis 11.1. Výber a formátovanie údajov v databáze MySQL
@mysql_connect("localhost", "web", "ffttss")
or die("Nepodarilo sa pripojiť k serveru MySQL!");
@mysql_select_db("spoločnosť")
// Vyberte všetky záznamy z tabuľky produktov
$dotaz = "VYBERTE * Z produktov"; $vysledok = mysql_query($dotaz);
tlačiť"
identifikačné číslo produktu | Meno Produktu | cena produktu | \n
---|---|---|
$id | \n$name | \n$ cena | \n";
Ako výsledok spustenia tohto príkladu s údajmi znázornenými na obr. 11.1 sa získa nasledujúci výsledok:
Výpis 11.2. Výsledok výpisu 11.1
Funkcia mysql_result() je užitočná na prácu s relatívne malými množinami údajov, existujú však aj iné funkcie, ktoré sú oveľa efektívnejšie, konkrétne funkcie mysql_fetch_row() a mysql_fetch_array(). Tieto funkcie sú popísané v nasledujúcich častiach.
mysql_fetch_row()
Zvyčajne je oveľa pohodlnejšie okamžite priradiť hodnoty všetkých polí záznamu prvkom indexovaného poľa (začínajúc indexom 0), ako opakovane volať mysql_result() na získanie jednotlivých polí. Úlohu rieši funkcia mysql_fetch_row(), ktorá má nasledujúcu syntax:
pole mysql_fetch_row (int výsledok)
Použitie funkcie list() v spojení s mysql_fetch_row() ušetrí niekoľko príkazov potrebných pri použití mysql_result(). Výpis 11.3 zobrazuje kód vo Výpise 11.1 prepísaný pomocou list() a mysql_fetch_row().
Výpis 11.3. Načítavanie údajov pomocou mysql_fetch_row()
@mysql_connect("localhost", "web", "ffttss") alebo die("Nepodarilo sa pripojiť k serveru MySQL!");
@mysql_select_db("spoločnosť") or die("Nepodarilo sa vybrať databázu produktov!");
$dotaz = "VYBERTE * Z produktov";
$vysledok = mysql_query($dotaz);
tlačiť"
identifikačné číslo produktu | Meno Produktu |
cena produktu | \n
---|---|---|
".$row["prod_id"]." | \n".$row["názov_výrobku"]." | \n" .$row["prod_price"]." | \n";
Výpis 11.3 poskytuje rovnaký výsledok ako výpis 11.1, ale používa menej príkazov.
moje sq l_f etch_array()
Funkcia mysql_fetch_array() je podobná funkcii mysql_fetch_row(), avšak štandardne sú hodnoty polí záznamu uložené v asociatívne pole. Môžete si však vybrať typ indexovania (asociatívne, číselné alebo kombinované). Syntax funkcie mysql_fetch_array():
pole mysql_fetch_array (int result id [, index_type])
Parameter result_id je hodnota vrátená funkciou mysql_query(). Voliteľný parameter index_type má jednu z nasledujúcich hodnôt:
- MYSQL_ASSOC -- Funkcia mysql_fetch_array() vracia asociatívne pole. Ak parameter nie je zadaný, štandardne sa použije táto hodnota;
- MYSQL_NUM -- mysql_fetch_array() vráti pole číselne indexované;
- MYSQL_BOTH -- K poliam vráteného záznamu je možné pristupovať pomocou číselných aj asociatívnych indexov.
Výpis 11.4 obsahuje inú verziu kódu vo výpisoch 11.1 a 11.3. Tentokrát sa použije funkcia mysql_fetch_array(), ktorá vráti asociatívne pole polí.
Výpis 11.4. Načítavanie údajov pomocou mysql_fetch_array()
@mysql_connect("localhost", "web", "ffttss")
or die("Nepodarilo sa pripojiť k serveru MySQL!");
@mysql_select_db("spoločnosť")
or die("Nepodarilo sa vybrať databázu produktov!");
$dotaz = "VYBERTE * Z produktov";
$vysledok = mysql_query($dotaz);
"
identifikačné číslo produktu | Meno Produktu | cena produktu | \n
---|---|---|
".$row["prod_id"]." | \n".$row["názov_výrobku"]." | \n" .$row["prod_price"] ." | \n" ;
Výpis 11.4 dáva rovnaký výsledok ako výpis 11.1 a 11.3.
To, čo teraz viete o funkcionalite MySQL v PHP, stačí na to, aby ste mohli začať vytvárať celkom zaujímavé aplikácie. Prvá aplikácia, na ktorú sa pozrieme, je jednoduchý vyhľadávač. Tento príklad demonštruje použitie formulárov HTML (pozri predchádzajúcu kapitolu) na získanie údajov, ktoré sa potom použijú na získanie informácií z databázy.
Príklad jednoduchého vyhľadávača v PHP
Všetci sme na webe použili vyhľadávače viac ako raz, ale ako fungujú vyhľadávače? Najjednoduchší vyhľadávač akceptuje aspoň jedno kľúčové slovo. Toto slovo je zahrnuté v dotaze SQL, ktorý sa potom používa na získanie informácií z databázy. Výsledok vyhľadávania je formátovaný vyhľadávacím nástrojom podľa jedného alebo druhého kritéria (povedzme podľa kategórie alebo stupňa zhody).
Vyhľadávač zobrazený vo výpise 11.5 slúži na vyhľadávanie informácií o zákazníkoch. Používateľ do formulára zadá kľúčové slovo a vyberie kategóriu (meno zákazníka, IČO alebo e-mailovú adresu), v ktorej bude hľadať. Ak užívateľom zadaný názov, identifikátor alebo adresa existuje, vyhľadávací nástroj načíta zvyšok atribútov z databázy. Potom sa podľa ID kupujúceho vyberie z tabuľky objednávok
História objednávok. Všetky objednávky zadané týmto zákazníkom sú zobrazené v zostupnom poradí podľa objemu. Ak sa zadané kľúčové slovo nevyskytuje v kategórii zadanej používateľom, vyhľadávanie sa zastaví, program zobrazí príslušnú správu a znova zobrazí formulár.
Výpis 11.5. Najjednoduchší vyhľadávač (searchengine.php)
"
Osobný účet poistenca
Automatický identifikačný systém Spoločné používanie AIS s elektronickým mapovým systémom
Wargame: Red Dragon sa nespúšťa?
Smutný escobar „Tvár súdneho systému Ukrajiny“
ROME Total War – ako odomknúť všetky frakcie?